2014-11-26 1 views
0

나는 mysql을 배우고 있으며 프로 시저 위로 이동했습니다. 프로 시저를 만들었고 실행하려고합니다. 그러나 내가 많은 오류에 직면하는 절차를 실행할 때, 오류가없는 선에 대한 오류 지점은 아무도 나를 도울 수 있습니까? SQL 프로 시저 오류

이 내가 절차

DECLARE 
V_AGENCY_ID NUMBER:=&Enter_Agency_ID; 
V_NO_OF_RUNS NUMBER:=&Enter_No_of_Runs; 
V_CREDIT_WORTHY CHAR(3):=&Enter_Credit_Worthy; 
V_AVAILABLE_SLOTS NUMBER:=&Enter_Available_Slots; 
V_STATUS CHAR(1):=&Enter_Status; 
    BEGIN 
    V_AGENCY_ID := NULL; 
V_NO_OF_RUNS := NULL; 
V_CREDIT_WORTHY := NULL; 
V_AVAILABLE_SLOTS := NULL; 
V_STATUS := NULL; 

AD_AGENCY_INFO(
    V_AGENCY_ID => V_AGENCY_ID, 
    V_NO_OF_RUNS => V_NO_OF_RUNS, 
    V_CREDIT_WORTHY => V_CREDIT_WORTHY, 
    V_AVAILABLE_SLOTS => V_AVAILABLE_SLOTS, 
    V_STATUS => V_STATUS 
); 
    END; 

를 호출하고 어떻게 내가

create or replace PROCEDURE AD_AGENCY_INFO(
    v_ad_id IN ad_agency.AGENCY_ID%TYPE, 
    v_cert IN ad_agency.NO_OF_AD_RUNS%TYPE, 
    v_price IN ad_agency.CREDIT_WORTHY%TYPE, 
    v_agency_id IN ad_agency.AGENCY_ID%TYPE 
) AS 
BEGIN 

UPDATE AD SET AD_ID = v_ad_id, CERTIFICTAION = v_cert, PRICE = v_price where agency_id = v_agency_id; 
    INSERT INTO AD_SLOT (AD_ID) VALUES (v_ad_id); 

EXCEPTION 
WHEN NO_DATA_FOUND THEN 
rollback; 

END AD_AGENCY_INFO; 

를 생성 한 절차 그리고 이것은 내가 절차

Error report - 
ORA-06550: line 4, column 28: 
PLS-00201: identifier 'N' must be declared 
ORA-06550: line 4, column 19: 
PL/SQL: Item ignored 
ORA-06550: line 6, column 21: 
PLS-00201: identifier 'Y' must be declared 
ORA-06550: line 6, column 12: 
PL/SQL: Item ignored 
ORA-06550: line 10, column 3: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 10, column 3: 
PL/SQL: Statement ignored 
ORA-06550: line 12, column 3: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 12, column 3: 
PL/SQL: Statement ignored 
ORA-06550: line 17, column 24:  
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 14, column 3: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 
를 실행 한 후 얻을 오류 로그입니다
+0

MySQL이 아닌 Oracle을 실행하고 있습니다. –

+0

죄송합니다. 아직이 모든 것을 배우고 있습니다. 문제를 해결할 수 있습니까? – Hayes121

+0

필자는 Oracle SP에 대한 충분한 경험이 없으며, 오류 메시지가 유 별나게 이상하다고 생각합니다. 질문에 태그를 다시 붙이면 오라클이 더 많은 사람들이 그것을 찾을 수 있습니다. –

답변

0

프로 시저를 호출하는 데 사용하는 스크립트에서 대체 변수를 사용하고 있습니다. 그들은 스크립트가 해석되기 전에 값으로 대체됩니다. 즉, V_CREDIT_WORTHY CHAR(3):=&Enter_Credit_Worthy;과 같은 값이 "no"인 행은 V_CREDIT_WORTHY CHAR(3):=no;으로 변환됩니다. 여기서 "no"는 인용되지 않습니다. 대체 변수를 사용하여 문자열을 PL/SQL 스크립트에 전달하려면 바인드 변수를 따옴표로 묶어야합니다 (V_CREDIT_WORTHY CHAR(3):='&Enter_Credit_Worthy';).

대체 변수는 바인드 변수를 사용하는 것입니다. 스크립트의 일부로 해석되므로 일반 변수로 처리 할 수 ​​있습니다. 이렇게하려면 앰퍼샌드를 콜론으로 바꾸기 만하면됩니다. 위에서 언급 한 선은 V_CREDIT_WORTHY CHAR(3):=:Enter_Credit_Worthy;이됩니다.

+0

답장을 보내 주셔서 감사합니다. 제안한 변경 사항을 적용했지만 많은 오류가 제거되었지만 여전히 오류가 있습니다. '오류 보고서 - ORA-06550 : 줄 14, 열 5 : PLS-00306 : 'AD_AGENCY_INFO'에 대한 호출에서 번호 나 유형이 잘못되었습니다. ORA-06550 : 14 행 5 열 : PL/SQL : 문이 무시되었습니다. 06550. 00000 - "행 % s, 열 % s : \ n % s " * 원인 : 일반적으로 PL/SQL 컴파일 오류입니다. * Action : ' – Hayes121

+0

이 오류는 매우 간단합니다. 오라클은 스크립트에 선언 된 변수의 유형이 프로 시저 선언과 일치한다고 생각하지 않습니다. 프로 시저가'% TYPE'을 사용하기 때문에이 문제를 해결하기 위해 테이블 ​​정의가 필요합니다. – Allan

+0

모든 도움을 주셔서 감사합니다. 코드를 편집했지만 12 행에서 코드가 멈추는 오류가 발생했습니다. – Hayes121