반응형
시작과 끝이 있는 두 개의 PLSQL 문은 별도로 잘 실행되지만 함께 실행되지는 않습니까?
이것을 도와줄 수 있는 사람이 있는지 궁금합니다. 테이블을 변경하기 위한 두 개의 PLSQL 문이 있으며 다음과 같습니다.
-- Make GC_NAB field for Next Action By Dropdown
begin
if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))';
elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or
'VARCHAR2' = 'VARCHAR2' then
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))';
else
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)';
end if;
commit;
end;
-- Make GC_NABID field for Next Action By Dropdown
begin
if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))';
elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or
'NUMBER' = 'VARCHAR2' then
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())';
else
execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)';
end if;
commit;
end;
이 두 쿼리를 따로 실행하면 문제가 없습니다.그러나 위와 같이 실행하면 Oracle이 두 번째 문을 시작할 때 오류가 발생합니다.
Error report:
ORA-06550: line 15, column 1:
PLS-00103: Encountered the symbol "BEGIN"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
이것은 첫번째 진술이 제대로 종결되지 않았다는 것을 의미한다고 생각합니다.제가 제대로 작동하기 위해 명세서 사이에 넣어야 하는 것이 있습니까?
Oracle은 SQL 문 또는 PL/SQL 익명 블록을 한 번에 하나씩 취할 수 있습니다.(한 번에 배치를 제외할 수 있는 SQL Server와 달리)그럼, 두 가지 선택지가 있습니다.
두 개의 익명 블록을 다른 익명 블록 안에 래핑합니다.
begin -- Make GC_NAB field for Next Action By Dropdown begin if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))'; elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or 'VARCHAR2' = 'VARCHAR2' then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))'; else execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)'; end if; commit; end; -- Make GC_NABID field for Next Action By Dropdown begin if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))'; elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or 'NUMBER' = 'VARCHAR2' then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())'; else execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)'; end if; commit; end; end;
PL/SQL을 Oracle에 제출할 때 사용하고 있는 툴에 두 블록을 따로 보내도록 지시합니다.이 작업을 수행하는 방법은 도구에 따라 다릅니다.SQL*PLUS에서, a
/
그 자체만으로 이를 달성할 수 있습니다.-- Make GC_NAB field for Next Action By Dropdown begin if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))'; elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or 'VARCHAR2' = 'VARCHAR2' then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))'; else execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)'; end if; commit; end; / -- Make GC_NABID field for Next Action By Dropdown begin if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))'; elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or 'NUMBER' = 'VARCHAR2' then execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())'; else execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)'; end if; commit; end; /
예, 슬래시가 필요합니다./
차례차례에 걸쳐end;
.
두 가지 방법으로 성취할 수 있습니다.
1) 두 블록을 각각 pl/sql 파일로 실행합니다.
2) 메인 블록에서는 다음과 같은 방식으로 두 sbu-block을 실행할 수 있습니다.
begin // main block
begin
..... [pl/sql commands]
......
end
begin
....... [pl/sql commands]
.......
end
end // main ends
언급URL : https://stackoverflow.com/questions/3024418/two-plsql-statements-with-begin-and-end-run-fine-separately-but-not-together
반응형
'programing' 카테고리의 다른 글
jQuery.jaxSetup에 설정된 특정 요청 헤더를 제거합니다. (0) | 2023.09.14 |
---|---|
MySQL의 Varbinary 대 Blob (0) | 2023.09.14 |
핵심 데이터를 미리 채울 방법이 있습니까? (0) | 2023.09.14 |
워드프레스의 이미지에 카테고리 할당 (0) | 2023.09.14 |
-webkit-transform을 사용하면 위치가 고정되지 않습니다. (0) | 2023.09.14 |