2016-10-03 20 views
-2

我已經調用後使用呼籲boyh程序以下過程使用調用invoicetest.wj_get_invoicedatatest(1,:InvoicesCur)給出錯誤;調用invoicetest.wj_get_invoice_cbodataidstest('X');

CREATE OR REPLACE PACKAGE invoicetest 
    IS 
     TYPE InvoiceCBOIDCurs IS REF CURSOR; 
     TYPE InvoicesCur IS REF CURSOR; 

     PROCEDURE wj_get_invoice_cbodataidstest 
    (
     InvoiceCBOIDs out InvoiceCBOIDCurs 
    ); 
     PROCEDURE wj_get_invoicedatatest 
    (
     Invoice out InvoicesCur, 
     CBOID IN INTEGER 
    ); 
    END invoicetest; 
    /

    CREATE OR REPLACE PACKAGE BODY invoicetest IS 
    PROCEDURE wj_get_invoice_cbodataidstest 
    (
     InvoiceCBOIDs out InvoiceCBOIDCurs 
    ) 
    IS 
    BEGIN 
     OPEN InvoiceCBOIDs FOR 
       Select 1 from dual; 
    END wj_get_invoice_cbodataidstest; 

    PROCEDURE wj_get_invoicedatatest 
    (
     Invoice out InvoicesCur, 
     CBOID IN INTEGER 
    )as 
    begin 
    OPEN Invoice FOR 
    select cboid from dual; 
    end wj_get_invoicedatatest; 
    END invoicetest; 
    /

錯誤後遇到錯誤:

invoicetest.wj_get_invoicedatatest(1,:InvoicesCur); call invoicetest.wj_get_invoice_cbodataidstest('X');

+1

什麼錯誤?你怎麼稱呼程序?請用過程調用和錯誤發佈代碼 – Aleksej

+0

錯誤從命令行中的第43行開始: 調用invoicetest.wj_get_invoicedatatest(1,:InvoicesCur) 錯誤報告: SQL錯誤:ORA-01008:並非所有變量綁定 01008. 00000 - 「並非所有變量都綁定」 *原因: *操作: –

+0

我已授予用戶所有權限 –

回答

0

你的程序是確定的,但你是在一個錯誤的方式打電話給他們;在一種情況下,您使用錯誤順序的參數,而在另一種情況下,您正在傳遞一個varchar,而過程需要一個遊標參數。 這是調用你的程序以正確的方式:如果你需要使用CALL

... 
invoicetest.wj_get_invoicedatatest(
            Invoice  =>vCur, 
            CBOID   => 1 
           ); 
-- 
invoicetest.wj_get_invoice_cbodataidstest(
              InvoiceCBOIDs => vCurCBO 
             ); 
... 

SQL> declare 
    2  vCurCBO invoicetest.InvoiceCBOIDCurs; 
    3  vCur invoicetest.InvoicesCur; 
    4 begin 
    5  invoicetest.wj_get_invoicedatatest(vCur, 1); 
    6  -- 
    7  invoicetest.wj_get_invoice_cbodataidstest(vCurCBO); 
    8  -- 
    9  /* what you need to do with your cursors */ 
10 end; 
11/

PL/SQL procedure successfully completed. 

SQL> 

爲了避免混淆,您可以通過顯式地使用他們的名字傳遞參數

SQL> VARIABLE vCurCBO REFCURSOR; 
SQL> VARIABLE vCur REFCURSOR; 
SQL> CALL invoicetest.wj_get_invoice_cbodataidstest(
    2             InvoiceCBOIDs => :vCurCBO 
    3            ); 

Call completed. 

SQL> CALL invoicetest.wj_get_invoicedatatest(
    2           Invoice  =>:vCur, 
    3           CBOID   => 1 
    4          ); 

Call completed. 

SQL> 
+0

我想使用call package.procedure(參數)格式 –

+0

我想要在TIBCO BW中調用此過程的輸出調用適配器調色板 –

+0

編輯以顯示調用方式 – Aleksej