2010-01-04 3 views
3

프로 시저에서 create table/alter table 명령을 호출하려고합니다. 가능한가?SQL 저장 프로 시저에서 작성/변경

내 요구 사항은 모든 테이블에서 열의 데이터 형식을 변경하는 것입니다. 그래서 저는 열 이름을 user_tab_cols에서 얻고 있습니다. 지금은 문을 만들 필요가있는 임시 테이블을 만들고 싶습니다.하지만 프로 시저 내에서 사용할 수 없습니다.

누구든지 나를 도와 줄 수 있습니까?

+0

mssqlserver? mysql? – spender

+0

Oracle에서 임시 테이블을 생성 할 필요가 없습니다. 전역 임시 테이블 사용을 고려해야합니다. 한 번만 생성되지만 각 세션은 자신의 개인 복사본이있는 것처럼 사용할 수 있습니다 (세션이 끝나면 (또는 커밋 시간, 너가 선호한다면)). –

답변

11

USER_TAB_COLUMNS은 오라클이라고 가정합니다. ALTERCREATE 문은 DDL이며 PL/SQL에서 직접 실행할 수 없습니다. 그러나이 제한을 둘러싼 몇 가지 방법은 EXECUTE IMMEDIATEDBMS_UTILITY.EXEC_DDL()입니다. 다음 예제에서는 EXECUTE IMMEDIATE을 사용합니다.

begin 
    for lrec in (select table_name from user_tab_columns 
        where column_name = 'UNIVERSAL_COLUMN_NAME') 
    loop 
     execute immediate 'alter table '||lrec.table_name|| 
           ' modify UNIVERSAL_COLUMN_NAME varchar2(255)'; 
    end loop; 
end; 

참고 일반적인 제한 사항이 적용된다는 것을 : 새로운 데이터 유형은 기존의 데이터 유형과 호환되어야합니다 (열이 비어있는 경우를 제외하고), 사물이 CLOB를 같은 일부 specilaized 데이터 유형과 난이도가 있습니다.

편집

내가 CREATE TABLE 문을 해결하지 않았습니다. 원리는 동일하며, 타이핑하는 것이 더 길다. 게다가, 나는 그 열의 데이터 유형을 변경하기위한 이전 요구 사항에 어떻게 적용되는지 완전히 명확하지 않습니다.

+1

감사합니다 .. 나는 그 하나를 사용하고 그 절대적으로 잘 작동합니다. 고맙습니다. –

+2

사용 중이며 작동하는 경우 대답을 승인 된 것으로 표시하십시오. 왼쪽의 큰 수표를 클릭하면 초록색이됩니다. –

0

문자열을 쿼리로 생성하고 'exec'키워드로 실행할 수 있습니다.

+0

'exec'는 PL/SQL이 아닌 SQL * Plus입니다 –

+0

OP는 오라클을 원래 언급하지 않았습니다. 충분하게 지식이있는 사람은'user_tab_columns'의 존재로 그것을 추측 할 수 있지만이 응답은 무죄입니다. – Dan

+0

무고한,하지만별로 도움이되지 :) –

관련 문제