2013-11-25 62 views
23

我試圖運行此存儲過程如何在oracle sql developer中運行存儲過程?

DECLARE 
    P_TICKER_SERIAL VARCHAR2(200); 
    P_SECTOR_CODE VARCHAR2(200); 
    P_SOURCE_ID  VARCHAR2(200); 
    P_COUNTRY_CODE VARCHAR2(200); 
    P_FILTER_TYPE NUMBER; 
    CUR_OUT   SYS_REFCURSOR; 
    dbUserTable  DBUSER%ROWTYPE; 
BEGIN 
    P_TICKER_SERIAL :='14232'; 
    P_SECTOR_CODE := '15'; 
    P_SOURCE_ID  := 'TDWL'; 
    P_COUNTRY_CODE := 'SA'; 
    P_FILTER_TYPE := 1; 

    PKG_name.GET_user(
    P_TICKER_SERIAL => P_TICKER_SERIAL, 
    P_SECTOR_CODE => P_SECTOR_CODE, 
    P_SOURCE_ID  => P_SOURCE_ID, 
    P_COUNTRY_CODE => P_COUNTRY_CODE, 
    P_FILTER_TYPE => P_FILTER_TYPE, 
    CUR_OUT   => CUR_OUT 
); 
    open CUR_OUT; 
    LOOP 
    FETCH CUR_OUT INTO dbUserTable; 
    dbms_output.put_line(dbUserTable.email); 
    END LOOP; 
    CLOSE CUR_OUT; 
END; 
/

但它給我這個錯誤

Error report: 
ORA-06550: line 8, column 15: 
PLS-00201: identifier 'DBUSER' must be declared 
ORA-06550: line 8, column 15: 
PL/SQL: Item ignored 
ORA-06550: line 24, column 2: 
PLS-00382: expression is of wrong type 
ORA-06550: line 24, column 2: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 26, column 24: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 26, column 5: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 27, column 28: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 27, column 7: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

任何人知道什麼是錯的? 謝謝。

+0

CUR_OUT表示多行不是單個值。 –

+0

1)GET_user過程很可能會打開遊標,不需要再次打開(導致PLS-00382錯誤) - 刪除打開的CUR_OUT語句; 2)當CUR_OUT%未找到時,如果您不想永遠掛斷會話,則需要退出循環條件退出。 –

回答

37

試圖執行這樣的程序,

var c refcursor; 
execute pkg_name.get_user('14232', '15', 'TDWL', 'SA', 1, :c); 
print c; 
+0

感謝您的快速回復,但它給了我這個錯誤:綁定變量「c」不聲明 匿名塊完成 –

+1

@Samy Louize Hanna,在執行過程之前,您需要運行'var c refcursor'此機制用於分配值給一個變量。 – Dba

+0

從命令行第3行開始時出錯: 執行pkg_name.get_user('14232','15','TDWL','SA',1,:c) 錯誤報告: ORA-00904:「TDWL」:invalid標識 ORA-06512:在 「schema.PKG_name」,線路156 ORA-06512:在line 1 00904. 00000 - 「%s的:無效的標識符」 *原因: *操作:156 線不是指到我的存儲過程 –

0

考慮您製作了下面的過程。

CREATE OR REPLACE PROCEDURE GET_FULL_NAME like 
(
    FIRST_NAME IN VARCHAR2, 
    LAST_NAME IN VARCHAR2, 
    FULL_NAME OUT VARCHAR2 
) IS 
BEGIN 
    FULL_NAME:= FIRST_NAME || ' ' || LAST_NAME; 
END GET_FULL_NAME; 

在Oracle SQL Developer中,您可以通過兩種方式運行此過程。

1.使用SQL工作表

創建SQL工作表和寫入PL/SQL匿名塊這樣與按F5

DECLARE 
    FULL_NAME Varchar2(50); 
BEGIN 
    GET_FULL_NAME('Foo', 'Bar', FULL_NAME); 
    Dbms_Output.Put_Line('Full name is: ' || FULL_NAME); 
END; 

2.使用GUI控件

  • 展開程序

  • 右鍵單擊您所創建的procudure和點擊運行

  • 在彈出的窗口中,填寫參數,然後單擊OK

乾杯!

相關問題