2017-02-10 10 views
0

Iamの使用手順はOracle 10.2に保存されていますが、このバージョンではカーソルは暗黙的にまたは暗黙的に閉じますか?例えば、Javaを閉じると、次のようになります。Oracle 10の暗黙的または明示的にoracleのストアド・プロシージャ内のカーソルをクローズしますか?

sql = "{ call procedureName (?,?)}"; 
    PreparedStatement st = getCon().prepareCall(sql); 
    . 
    . 
    . 
    st.execute(); 
    . 
    . 
    . 
    st.close(); 

そして、ストアドプロシージャのカーソルをどこで閉じることができますか?

ありがとうございます!

ストアドプロシージャを追加します。

CREATE OR REPLACE PROCEDURE OWNER.STOREDPROCEDURE(
    V_OPTION IN NUMBER, 
    V_STA IN OWNER.TABLENAME.ATTRIBUTENAME%TYPE, 
    V_DESC IN OWNER.TABLENAME.ATTRIBUTENAME%TYPE, 
    V_CURSOR OUT SYS_REFCURSOR, 
    Error_Code OUT NUMBER, 
    Error_Msg OUT VARCHAR2) 

    IS 
    V_ST_LN NUMBER:= LENGTH(V_STA); 
    V_DSC_LN NUMBER:= LENGTH(V_DESC); 
    BEGIN 
     IF V_ST_LN >0 AND V_DSC_LN >0 THEN 
      IF V_STA IS NOT NULL AND V_OPTION IS NOT NULL THEN 
       CASE V_OPTION 
        WHEN 1 THEN 
         OPEN V_CURSOR FOR 
          SELECT *FROM OWNER.TABLENAME SB WHERE SB.STA = V_STA; 
          Error_Code:=0; 
          Error_Msg:='DONE'; 
        WHEN 2 THEN 
         IF V_DESC IS NOT NULL THEN 
          OPEN V_CURSOR FOR 
           SELECT *FROM OWNER.TABLENAME SB WHERE SB.STA = V_STA AND SB.DESC != V_DESC; 
           Error_Code:=0; 
           Error_Msg:='DONE'; 
         ELSE 
           Error_Code:=1; 
           Error_Msg:='NO CONDITIONS TO BE EXECUTED STOREDPROCEDURENAME'; 
         END IF; 
       END CASE; 
       ELSE 
        Error_Code:=1; 
        Error_Msg:='NO CONDITIONS TO BE EXECUTED STOREDPROCEDURENAME'; 
      END IF; 
     ELSE 
      Error_Code:=1; 
       Error_Msg:='NO CONDITIONS TO BE EXECUTED STOREDPROCEDURENAME'; 
      END IF; 
    EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
      Error_Code:=1; 
      Error_Msg:='DONE, NO DATA FOUND'; 
      RAISE_APPLICATION_ERROR (-20100, 'NO DATA FOUND STOREDPROCEDURENAME(' || SQLCODE || ' ' || SQLERRM || ')'); 
     WHEN OTHERS THEN 
      Error_Code:=4; 
      Error_Msg:=SQLCODE || ' ' || SQLERRM; 
      RAISE_APPLICATION_ERROR (20100, 'DON'T EXECUTE STOREDPROCEDURENAME (' || SQLCODE || ' ' || SQLERRM || ')'); 
END STOREDPROCEDURENAME; 
/
GRANT EXECUTE ON OWNER.STOREDPROCEDURE TO USER; 

ここで私のカーソルを閉じるには?

+0

Oracleストアドプロシージャ内の 'CURSOR'を閉じる方法を意味しますか?あなたはその手順の中でそれをする必要があります。 JDBCの 'Statement'を意味するならば、[try-with-resources](http://stackoverflow.com/questions/8066501/how-should-i-use-try-with-resources-with-jdbc)を使うべきです。それを閉じるために。 –

+0

はい、ストアドプロシージャ内です。 – 5frags

+0

その後、手順の関連部分を共有してください。 –

答えて

0

だけでカーソルという概念を明確にする:

暗黙カーソル:1つの結果だけを持っているSQL-文、用

  • 。例えば:

更新...設定します.. ID = 47

  • DB-サーバーはそれを処理します。

Excplicitカーソル:

  • 缶は、1以上の行から成る結果セット指向のクエリ。
  • は、プロシージャで明示的に宣言されています。

カーソルの開閉は、通常、プロシージャ内で行われます。

Cursor-For-Loopを使用すると、カーソルの開閉が自動的に行われます。

+0

更新情報、ありがとうございます。 – 5frags

+0

https://community.oracle.com/thread/888365 plsが最初の章を読んでいます。ほんの数分かかります。後でありがとう;) – QuickSort

関連する問題