2013-02-15 3 views
0

최근 정기적 인보고 프로세스를 위해 데이터 마트를 준비하기 시작했으며 매개 변수가있는 프로 시저를 사용하려고했습니다.루핑 및 즉시 실행 절차

그래서 this guideline을 읽고 복제하려고 시도했지만 컴파일시 오류가 있습니다.

create or replace procedure mig_rate @rep_date date AS 
    create or replace table mig_temp1(
    report_date date, 
    portfolio string, 
    bucket integer, 
    Q integer); 
begin  
    for j in 1..7 loop 
     for t in 0..32 loop 
     -- execute immediate 'bla-bla-bla insert statement mig_temp1 
     end loop; 
    end loop; 
end 

@ 기호는 예상치 못한 말하는 PLS-00103 결과 :

여기 내 코드입니다.

구문에 어떤 문제가 있습니까? 매개 변수를 프로 시저에 어떻게 넣어야합니까 ??

답변

0

가장 중요한 것은 오라클 데이터베이스에서 SQL Server 구문을 사용하려고한다는 것입니다.

첫째, 오라클 object names have to start with a letter (당신이 인용 식별자를 사용하지만,하지 마십시오 제외) 및 ... 음, 여기에 관련된 부분입니다

Nonquoted 식별자 에서 알파벳 문자로 시작해야합니다은 데이터베이스 문자 집합. 인용 된 식별자는 문자로 시작될 수 있습니다.

인용 부호가없는 식별자는 데이터베이스 문자 집합과 밑줄 (_), 달러 기호 ($), 및 파운드 기호 (#)의 영숫자 문자 만 포함 할 수 있습니다. 데이터베이스 링크에는 마침표 (.)와 "at"기호 (@)가 포함될 수도 있습니다. 오라클은 인용 부호가없는 식별자 인 에서 $ 및 #을 사용하지 않을 것을 강력히 권합니다.

따옴표 붙은 식별자는 공백뿐만 아니라 모든 문자와 문장 부호 ( )를 포함 할 수 있습니다. 그러나 인용 부호가없는 식별자 또는 인용 부호가없는 식별자 에는 큰 따옴표 또는 null 문자 (\ 0)가 포함될 수 있습니다.

... 따라서 프로 시저 이름에 전혀 @을 사용할 수 없으므로 SQL Server의 문제 일 필요는 없습니다. (필자는 사용하지 않습니다!).

편집 : 나는 SQL Server에 익숙하지 않아서 무엇을하고 있는지 잘못보고 있습니다. 프로 시저 이름은 OK이지만 매개 변수를 선언하는 방법이 아닙니다. 시작해야합니다 :

create or replace procedure mig_rate(rep_date date) as 
... 

둘째, 오라클 절차에서 이와 같은 테이블을 만들 수 있습니까? 프로 시저 기간 동안 임시 테이블을 원하는 것처럼 보입니다.하지만 오라클이 작동하는 방식이 아닙니다. 프로 시저 외부에서 전역 임시 테이블을 만들 수 있지만 영구 데이터베이스 개체입니다. 데이터는 일시적입니다.

대신 PL/SQL collection을 사용할 수 있지만 사용하려는 작업에 따라 다릅니다. 일반 테이블에 삽입하기 전에 스테이징 영역이라면 단일 SQL 명령으로 수행 할 수 있습니다.

동적 SQL (execute immediate)을 사용하려는 이유가 확실하지 않습니다 ...

수행 할 작업을 배우려면 SQL Server 관련 사이트가 아닌 PL/SQL language reference 및 Oracle 관련 사이트를 참조하십시오. 그들이 일하는 방식에는 매우 중요한 차이가 있습니다.

+0

알렉스! 답변을 주셔서 감사합니다. 잠시만 머물 렀습니다. 귀하의 링크를 연구 할 예정이며, 아마도 새로운 질문이 생길 것입니다.) 내가 실행하는 데 사용하려는 이유는 테이블 내가 참조하는 x_1, x_2, x_3 같은 열 이름이 ... 그래서 "0..32 루프에서 t"그들을 통해 루프 싶지 " – user2074685