CREATE OR REPLACE 사용방법
CREATE OR REPLACE는 기본적으로 "개체가 존재하면 삭제하고, 어느 쪽으로든 생성한다"는 의미라고 이해해도 될까요?
그렇다면 제가 뭘 잘못하고 있는 걸까요?이 방법은 다음과 같습니다.
CREATE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
이 옵션은 다음과 같습니다(ORA-00922: missing or invalid option).
CREATE OR REPLACE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
제가 바보 같은 짓을 하고 있나요?나는 이 구문에 대한 많은 문서를 찾을 수 없을 것 같다.
이것은 함수, 프로시저, 패키지, 유형, 동의어, 트리거 및 뷰에서 작동합니다.
업데이트:
투고를 세 번째로 갱신한 후, 이것을 재구성합니다.
이것은 테이블에서는 동작하지 않습니다. : )
네, 이 구문에 대한 문서도 있고REPLACE에 대한 선택권.CREATE TABLE.
이 구문의 장점 중 하나는 다음과 같습니다.CREATE OR REPLACE데이터가 손실되는 일은 없습니다(가장 많이 손실되는 것은 코드이며, 소스 컨트롤에 저장되어 있기를 바랍니다).
테이블의 동등한 구문은 ALTER입니다.즉, 필요한 변경을 명시적으로 열거해야 합니다.
편집: 덧붙여서 스크립트에서 DROP + CREATE를 수행해야 할 경우 스플리어스한 "object does not exist" 오류(DROP이 테이블을 찾을 수 없는 경우)가 발생하지 않을 경우 다음을 수행할 수 있습니다.
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE owner.mytable';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE; END IF;
END;
/
Oracle에는 테이블 생성 또는 치환 기능이 없습니다.
다음 작업을 수행해야 합니다.
드롭 테이블 foo;테이블 foo 작성(...);
CREATE OR REPLACE함수, 절차, 유형, 보기 또는 패키지에서만 사용할 수 있으며 테이블에서는 작동하지 않습니다.
다음 스크립트가 Oracle에서 기능을 수행합니다.
BEGIN
EXECUTE IMMEDIATE 'drop TABLE tablename';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE;
END IF;
END;
-- To Create or Replace a Table we must first silently Drop a Table that may not exist
DECLARE
table_not_exist EXCEPTION;
PRAGMA EXCEPTION_INIT (table_not_exist , -00942);
BEGIN
EXECUTE IMMEDIATE('DROP TABLE <SCHEMA>.<TABLE NAME> CASCADE CONSTRAINTS');
EXCEPTION WHEN table_not_exist THEN NULL;
END;
/
테이블, 기능 등에서는 동작하지 않습니다.
여기 몇 가지 예가 있는 사이트가 있습니다.
설명을 사용하지 않는 Oracle 데이터베이스에 대한 유용한 절차(경우에 따라 user_tables를 dba_tables로 바꾸거나 쿼리의 테이블스페이스를 제한해야 함):
create or replace procedure NG_DROP_TABLE(tableName varchar2)
is
c int;
begin
select count(*) into c from user_tables where table_name = upper(tableName);
if c = 1 then
execute immediate 'drop table '||tableName;
end if;
end;
코드로 작업하는 경우 먼저 SELECT table_name FROM user_display WHERE table_name = 'XYZ' 쿼리를 사용하여 데이터베이스의 테이블을 확인합니다.
레코드가 발견되면 표를 잘라냅니다. 그렇지 않으면 표를 만듭니다.
[ Create ]또는 [Replace]와 같이 동작합니다.
CORT(www.softcraftltd.co.uk/cort)를 사용할 수 있습니다.이 도구를 사용하면 Oracle에서 테이블을 생성 또는 교체할 수 있습니다.외관:
create /*# or replace */ table MyTable(
... -- standard table definition
);
데이터를 보존합니다.
그래서 저는 이것을 사용해 왔습니다만, 매우 잘 동작하고 있습니다.- DROP IF EXISTES 와 같은 동작이지만, 작업을 완료하고 있습니다.
DECLARE
VE_TABLENOTEXISTS EXCEPTION;
PRAGMA EXCEPTION_INIT(VE_TABLENOTEXISTS, -942);
PROCEDURE DROPTABLE(PIS_TABLENAME IN VARCHAR2) IS
VS_DYNAMICDROPTABLESQL VARCHAR2(1024);
BEGIN
VS_DYNAMICDROPTABLESQL := 'DROP TABLE ' || PIS_TABLENAME;
EXECUTE IMMEDIATE VS_DYNAMICDROPTABLESQL;
EXCEPTION
WHEN VE_TABLENOTEXISTS THEN
DBMS_OUTPUT.PUT_LINE(PIS_TABLENAME || ' NOT EXIST, SKIPPING....');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
RAISE;
END DROPTABLE;
BEGIN
DROPTABLE('YOUR_TABLE_HERE');
END DROPTABLE;
/
이것이 도움이 되기를 바랍니다.참조: PLS-00103 PL/SQL Developer 오류
'테이블 만들기 또는 바꾸기'는 불가능합니다.다른 사람이 설명한 대로 프로시저를 작성하거나 실행 시작(...)을 즉시 사용할 수 있습니다.표를 만드는 방법에 대한 답이 보이지 않아 대본을 넣었다.
PS: jeffrey-kemp가 언급한 대로: 스크립트 아래에 있는 이 경우 드롭하는 테이블에 이미 존재하는 데이터는 저장되지 않습니다.데이터 손실의 위험이 있기 때문에 당사에서는 생산 환경의 기존 테이블 변경만 허용되며 테이블 드롭은 허용되지 않습니다.드롭 테이블 스테이트먼트를 사용하면 조만간 회사 경찰이 책상에 서게 됩니다.
--Create the table 'A_TABLE_X', and drop the table in case it already is present
BEGIN
EXECUTE IMMEDIATE
'
CREATE TABLE A_TABLE_X
(
COLUMN1 NUMBER(15,0),
COLUMN2 VARCHAR2(255 CHAR),
COLUMN3 VARCHAR2(255 CHAR)
)';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -955 THEN -- ORA-00955: object name already used
EXECUTE IMMEDIATE 'DROP TABLE A_TABLE_X';
END IF;
END;
저는 이런 걸 할 거예요
begin
for i in (select table_name from user_tables where table_name = 'FOO') loop
execute immediate 'drop table '||i.table_name;
end loop;
end;
execute immediate 'CREATE TABLE FOO (id NUMBER,
title VARCHAR2(4000)) ';
MS SQL의 경우...테이블이 이미 존재하는지 여부에 관계없이 다음 코드는 항상 실행됩니다.
if object_id('mytablename') is not null //has the table been created already in the db
Begin
drop table mytablename
End
Create table mytablename (...
언급URL : https://stackoverflow.com/questions/1008248/how-do-i-use-create-or-replace
'programing' 카테고리의 다른 글
| jQuery AJAX 요청에 대한 응답으로 PNG 이미지 표시 (0) | 2023.03.01 |
|---|---|
| Mongoose(mongodb) 배치 인서트? (0) | 2023.03.01 |
| 최적의 문자열 연결/집약 방법 (0) | 2023.03.01 |
| AngularJS: 멀티파트 형식으로 심플한 파일 업로드를 구현하려면 어떻게 해야 합니까? (0) | 2023.03.01 |
| UI 라우터 확인 중 로드 스피너 적용 (0) | 2023.03.01 |