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;
ここで私のカーソルを閉じるには?
Oracleストアドプロシージャ内の 'CURSOR'を閉じる方法を意味しますか?あなたはその手順の中でそれをする必要があります。 JDBCの 'Statement'を意味するならば、[try-with-resources](http://stackoverflow.com/questions/8066501/how-should-i-use-try-with-resources-with-jdbc)を使うべきです。それを閉じるために。 –
はい、ストアドプロシージャ内です。 – 5frags
その後、手順の関連部分を共有してください。 –