> 데이터 베이스 > Oracle > Oracle 데이터베이스의 필드를 수정하는 방법

Oracle 데이터베이스의 필드를 수정하는 방법

青灯夜游
풀어 주다: 2022-03-02 18:13:51
원래의
18353명이 탐색했습니다.

Oracle에서는 "ALTER TABLE MODIFY" 문을 사용하여 필드를 수정할 수 있습니다. 구문은 "수행할 ALTER TABLE 테이블 이름 MODIFY 필드 이름 작업"입니다. 열의 기본값, 가상 열의 표현 수정 등

Oracle 데이터베이스의 필드를 수정하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

Oracle 데이터베이스에서 필드를 수정하는 방법

Oracle에서는 "ALTER TABLE MODIFY" 문을 사용하여 필드를 수정하고 기존 필드의 정의를 변경할 수 있습니다. ALTER TABLE MODIFY”语句来修改字段,更改现有字段的定义。

要更改表中列的定义,请按如下所示使用ALTER TABLE MODIFY列语法:

ALTER TABLE 表名 
MODIFY 字段名 需要执行的操作;
로그인 후 복사

语句很直接。要修改表的列,需要指定要执行的列名,表名和操作。

Oracle允许执行多种操作,但以下是主要常用的操作:

  • 修改列的可见性

  • 允许或不允许NULL值

  • 缩短或扩大列的大小

  • 更改列的默认值

  • 修改虚拟列的表达式

要修改多个列,请使用以下语法:

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);
로그인 후 복사

Oracle ALTER TABLE MODIFY列示例

首先,为演示创建一个名为accounts的新表:

-- 12c语法
CREATE TABLE accounts (
    account_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    first_name VARCHAR2(25) NOT NULL,
    last_name VARCHAR2(25) NOT NULL,
    email VARCHAR2(100),
    phone VARCHAR2(12) ,
    full_name VARCHAR2(51) GENERATED ALWAYS AS( 
            first_name || ' ' || last_name
    ),
    PRIMARY KEY(account_id)
);
로그인 후 복사

其次,向accounts表中插入一些行:

INSERT INTO accounts(first_name,last_name,phone)
VALUES('Trinity',
       'Knox',
       '410-555-0197');


INSERT INTO accounts(first_name,last_name,phone)
VALUES('Mellissa',
       'Porter',
       '410-555-0198');


INSERT INTO accounts(first_name,last_name,phone)
VALUES('Leeanna',
       'Bowman',
       '410-555-0199');
로그인 후 복사

第三,通过使用下面的SELECT语句验证插入操作:

SELECT
    *
FROM
    accounts;
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

执行上面查询语句,得到以下结果 -

Oracle 데이터베이스의 필드를 수정하는 방법

1. 修改列的可见性

在Oracle 12c中,可以将表列定义为不可见或可见。不可见列不可用于查询,如:

SELECT
    *
FROM
    table_name;
로그인 후 복사

或者,

DESCRIBE table_name;
로그인 후 복사

都是查到不到不可见列的。

但是,可以通过在查询中显式指定不可见列来查询:

SELECT
    invisible_column_1,
    invisible_column_2
FROM
    table_name;
로그인 후 복사

默认情况下,表列是可见的。可以在创建表或使用ALTER TABLE MODIFY列语句时定义不可见列。

例如,以下语句使full_name列不可见:

ALTER TABLE accounts 
MODIFY full_name INVISIBLE;
로그인 후 복사

执行再次查询表中数据,得到以下结果 -

Oracle 데이터베이스의 필드를 수정하는 방법

以下语句返回accounts表除了full_name列以外的所有列中返回数据:

SELECT
    *
FROM
    accounts;
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

这是因为full_name列是不可见的。要将列从不可见变为可见,请使用以下语句:

ALTER TABLE accounts 
MODIFY full_name VISIBLE;
로그인 후 복사

2. 允许或不允许null示例

以下语句将email列更改为接受非空(not null)值:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
로그인 후 복사
로그인 후 복사

但是,Oracle发出以下错误:

SQL Error: ORA-02296: cannot enable (OT.) - null values found
로그인 후 복사

因为当将列从可为null改为not null时,必须确保现有数据符合新约束(也就是说,如果原来数据中NULL是不行的)。

为了解决这个问题,首先更新email列的值:

UPDATE 
    accounts
SET 
    email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
로그인 후 복사

请注意,LOWER()函数将字符串转换为小写字母。

然后改变email列的约束:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
로그인 후 복사
로그인 후 복사

现在,它应该就会按预期那样工作了。

3. 扩大或缩短列示例的大小

假设要添加国际代码到phone列上,比如:前缀加上+86。 在修改列的值之前,必须使用以下语句扩大phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 24 );
로그인 후 복사

现在,我们可以更新电话号码的数据了:

UPDATE
    accounts
SET
    phone = '+86 ' || phone;
로그인 후 복사

以下语句验证更新:

SELECT
    *
FROM
    accounts;
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

执行上面查询语句结果中,应该可以看到原电话号码前缀有加上+86的国际区号了。

Oracle 데이터베이스의 필드를 수정하는 방법

要缩短列的大小,请确保列中的所有数据都符合新的大小。

例如,尝试将phone列的大小缩减到12个字符:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
로그인 후 복사
로그인 후 복사

Oracle数据库发出以下错误:

SQL Error: ORA-01441: cannot decrease column length because some  value is too big
로그인 후 복사

要解决这个问题,首先,应该从电话号码中删除国际代码(即:+86):

UPDATE
    accounts
SET
    phone = REPLACE(
        phone,
        '+86 ',
        ''
    );
로그인 후 복사

REPLACE()函数用一个新的子字符串替换一个子字符串。在这种情况下,它将用空字符串替换+86

然后缩短phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
로그인 후 복사
로그인 후 복사

4. 修改虚拟列

假设按以下两列的格式填写全名:

last_name, first_name
로그인 후 복사

为此,可以更改虚拟列full_name

테이블의 열 정의를 변경하려면 다음과 같이 ALTER TABLE MODIFY 열 구문을 사용하세요. 🎜
ALTER TABLE accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || ', ' || first_name);
로그인 후 복사
로그인 후 복사
🎜문은 간단합니다. 테이블의 컬럼을 수정하려면 컬럼 이름, 테이블 이름, 수행할 작업을 지정해야 합니다. 🎜🎜Oracle을 사용하면 다양한 작업을 수행할 수 있지만 일반적으로 사용되는 주요 작업은 다음과 같습니다. 🎜
  • 🎜열 표시 여부 수정🎜< /li>
  • 🎜NULL 값을 허용하거나 허용하지 않습니다🎜
  • 🎜열 크기를 줄이거나 확장합니다🎜
  • 🎜열의 기본값 변경🎜
  • 🎜가상 열 수식의 표현식 수정 🎜
🎜여러 열을 수정하려면 다음 구문을 사용하세요: 🎜
SELECT
    *
FROM
    accounts;
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Oracle ALTER TABLE MODIFY 열 예 🎜🎜🎜 먼저 🎜 데모용 accounts라는 새 테이블을 만듭니다. 🎜
ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
로그인 후 복사
로그인 후 복사
🎜🎜두 번째 🎜, accounts에 일부 행을 삽입합니다. 테이블: 🎜
ALTER TABLE accounts 
MODIFY status DEFAULT 0;
로그인 후 복사
로그인 후 복사
🎜🎜Third 🎜 , 다음 SELECT 문을 사용하여 삽입 작업을 확인합니다. 🎜
INSERT INTO accounts ( first_name, last_name, email, phone )
VALUES ( &#39;Julia&#39;,
         &#39;Madden&#39;,
         &#39;julia.madden@oraok.com&#39;,
         &#39;410-555-0200&#39; );
로그인 후 복사
로그인 후 복사
🎜위 쿼리 문을 실행하고 다음 결과를 얻습니다.🎜🎜Oracle 데이터베이스의 필드를 수정하는 방법🎜🎜🎜1. 열 가시성 수정 🎜🎜🎜Oracle 12c에서는 테이블 열을 표시 또는 표시로 정의할 수 있습니다. 🎜
SELECT
  *
FROM
  accounts;
로그인 후 복사
로그인 후 복사
🎜 또는 🎜rrreee🎜와 같은 쿼리에는 보이지 않는 열을 사용할 수 없습니다. 🎜🎜그러나 쿼리에 명시적으로 지정하여 보이지 않는 열을 쿼리할 수 있습니다. 🎜rrreee🎜테이블 열은 기본적으로 표시됩니다. 보이지 않는 열은 테이블을 생성하거나 ALTER TABLE MODIFY 열 문을 사용할 때 정의할 수 있습니다. 🎜🎜예를 들어 다음 문은 full_name 열을 보이지 않게 만듭니다. 🎜rrreee🎜테이블의 데이터 쿼리를 다시 실행하고 다음 결과를 얻습니다.🎜🎜Oracle 데이터베이스의 필드를 수정하는 방법🎜🎜다음 문은 계정을 반환합니다. full_name<을 제외한 테이블 /code> 열을 제외한 모든 열의 데이터를 반환합니다. 🎜rrreee🎜 이는 <code>full_name 열이 표시되지 않기 때문입니다. 열을 표시할 수 있는 상태로 변경하려면 다음 문을 사용하세요: 🎜rrreee🎜🎜2. null 예를 허용하거나 허용하지 않음🎜🎜🎜다음 문은 email 열이 null이 아닌(null이 아님) 값을 허용하도록 변경되었습니다: 🎜rrreee🎜 그러나 Oracle은 다음 오류를 발생시킵니다: 🎜rrreee🎜 열을 사용 가능에서 변경할 때 to nullnot null로 변경할 때 기존 데이터가 새 제약 조건을 준수하는지 확인해야 합니다(즉, NULL이 허용되지 않는 경우). 원본 데이터에서). 🎜🎜이 문제를 해결하려면 먼저 email 열의 값을 업데이트하세요. 🎜rrreee🎜LOWER() 함수는 문자열을 소문자로 변환합니다. 🎜🎜그런 다음 email 열의 제약 조건을 변경합니다. 🎜rrreee🎜이제 예상대로 작동합니다. 🎜🎜🎜3. 열의 크기를 늘리거나 줄이세요🎜🎜🎜휴대폰</code에 국제 코드를 추가하고 싶다고 가정해 보세요. > 열(예: <code>+86 접두사) 열 값을 수정하기 전에 다음 문을 사용하여 phone 열의 크기를 확장해야 합니다. 🎜rrreee🎜이제 전화번호 데이터를 업데이트할 수 있습니다. 🎜rrreee🎜다음 문은 업데이트: 🎜rrreee🎜Execute 위 쿼리문의 결과에서 원래 전화번호에는 +86 접두사가 붙은 국제 지역 코드가 있음을 확인할 수 있습니다. 🎜🎜Oracle 데이터베이스의 필드를 수정하는 방법🎜🎜To 열의 크기를 줄여 열의 모든 데이터가 새 크기에 맞는지 확인합니다. 🎜🎜예를 들어 phone 열의 크기를 12자로 줄여보세요. 🎜rrreee🎜Oracle 데이터베이스에서 다음 오류가 발생합니다. 🎜rrreee🎜이 문제를 해결하려면 먼저 , 전화번호에서 국제 코드를 제거해야 합니다(예: +86). 🎜rrreee🎜REPLACE() 함수는 하위 문자열을 새 하위 문자열로 바꿉니다. 이 경우 +86는 빈 문자열로 대체됩니다. 🎜🎜그런 다음 phone 열의 크기를 줄이세요: 🎜rrreee🎜🎜4. 가상 열을 수정하세요🎜🎜🎜 다음 두 열을 누르세요. 전체 이름을 🎜rrreee🎜 형식으로 입력하세요. 이렇게 하려면 가상 열 full_name의 표현을 다음과 같이 변경할 수 있습니다. 🎜
ALTER TABLE accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || &#39;, &#39; || first_name);
로그인 후 복사
로그인 후 복사

以下语句验证修改:

SELECT
    *
FROM
    accounts;
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

执行上面查询语句,可以看到以下结果

Oracle 데이터베이스의 필드를 수정하는 방법

5. 修改列的默认值

添加一个名为status的新列,默认值为1accounts表中。参考以下语句 -

ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
로그인 후 복사
로그인 후 복사

当执行了该语句,就会将accounts表中的所有现有行的status列中的值设置为1

要将status列的默认值更改为0,请使用以下语句:

ALTER TABLE accounts 
MODIFY status DEFAULT 0;
로그인 후 복사
로그인 후 복사

可以在accounts表中添加一个新行来检查status列的默认值是0还是1

INSERT INTO accounts ( first_name, last_name, email, phone )
VALUES ( &#39;Julia&#39;,
         &#39;Madden&#39;,
         &#39;julia.madden@oraok.com&#39;,
         &#39;410-555-0200&#39; );
로그인 후 복사
로그인 후 복사

现在,查询accounts表中的数据:

SELECT
  *
FROM
  accounts;
로그인 후 복사
로그인 후 복사

执行上面查询语句,应该看类似下面的结果 

Oracle 데이터베이스의 필드를 수정하는 방법

正如所看到的那样,ID4的账户的status列的值是0

推荐教程:《Oracle教程

위 내용은 Oracle 데이터베이스의 필드를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿