0

execute immediate 명령을 사용하여 테이블을 만드는 것은 좋지 않지만 연기하기 전에 사용자에게 두 가지 정보를 묻는 테이블을 만들어야한다는 것을 알고 있습니다. 현재 내가 가지고 :execute immediate 문에 기본값이있는 테이블 만들기

DECLARE 
TEST_NAME VARCHAR2(200); 
TEST_VERSION VARCHAR2(200); 
BEGIN 
    TEST_NAME := '&1'; 
    TEST_VERSION := '&2'; 

EXECUTE IMMEDIATE 'create table TEST_TABLE 
(
PROJ_NAME VARCHAR(255) DEFAULT TEST_NAME, 
PROJ_VER VARCHAR(255) DEFAULT TEST_VERSION, 
COL_1 NUMBER(5) 
)'; 
End; 

이 오류

Error report: 
ORA-00984: column not allowed here 
ORA-06512: at line 8 
00984. 00000 - "column not allowed here" 
*Cause:  
*Action: 

을 던졌습니다 나는이 문제를 해결할 수있는 방법은? 또한 두 번째 질문으로이 테이블을 만드는 데 성공하려면 다른 스크립트에서 if 문을 사용하여 변수를 proj_name 열의 기본값 (test_name)과 비교하는 방법은 무엇입니까?

편집 :

If test_var = proj_name.default_value ... 

내가 할 수 있어야합니다 : 사람이 도움을 수 있다면 문은 다음과 같은 일을 할 경우를 사용하는 방법을 알고 있지만 내가 처음으로 문제를 해결 tbone 및 Parado에 감사합니다 행이 삽입되지 않은 경우에도 기본 proj_name 값과 비교할 수 있습니다. 감사합니다,

답변

1

이 방법으로 시도 :

DECLARE 
TEST_NAME VARCHAR2(200); 
TEST_VERSION VARCHAR2(200); 
BEGIN 
    TEST_NAME := '&1'; 
    TEST_VERSION := '&2'; 

EXECUTE IMMEDIATE 'create table TEST_TABLE 
(
PROJ_NAME VARCHAR(255) DEFAULT '''||TEST_NAME||''', 
PROJ_VER VARCHAR(255) DEFAULT '''||TEST_VERSION||''', 
COL_1 NUMBER(5) 
)'; 
End; 
+0

고마워요! : D가 완벽하게 작동했습니다. – javakid1993

+0

답변을 수락하고 편집에서 내 두 번째 질문에 대한 또 다른 질문을 게시해야합니까? – javakid1993

+0

@ javakid1993 당신이해야한다고 생각합니다. – Parado

0

당신은 같은 것을 할 수 있습니다 : 여기 'SOME_VALUE'에 l_var1 하드 코딩 해요,하지만 당신은 동일한 방법을 사용할 수 있습니다

set serveroutput on 

declare 
    l_var1 varchar2(100) := 'SOME_VALUE'; 
    l_sql varchar2(4000); 
begin 
    l_sql := 'create table test_tab(
    col1 varchar2(100) default ''' || l_var1 || ''' 
)'; 

    -- show the ddl used 
    dbms_output.put_line(l_sql); 

    -- create the table 
    execute immediate l_sql; 

end; 

매개 변수 또는 사용자 변수.

+0

감사합니다! : D가 완벽하게 작동했습니다. – javakid1993

+0

@ javakid1993 듣기 좋기 만하다면이 대답을 수락 할 수 있습니다 (체크 표시를하십시오). – tbone