私は、以下の手順を実行しようとしていますため、無効なSQL文が、エラーを取得保管(ORA-00900:無効なSQL文)ORA-00900:Oracleの手順
CREATE OR REPLACE PROCEDURE RESETUSERSESSION (run IN VARCHAR2)
IS
cursor usersessiondetail_cur IS
SELECT usd.CLIENTID,usd.OPERID,usd.REGISTER,usd.MACHINE_ID,usd.SESSIONNUMBER
FROM cashiering_dev.CSH_USER usr, cashiering_dev.CSH_USERSESSIONDETAIL usd
WHERE usr.clientid = usd.clientid
AND usr.operid = usd.operid
AND usr.register = usd.register
AND usr.machine_id = usd.machine_id
AND usr.sessionnumber = usd.sessionnumber
AND usr.Machine_ID = 'basrytest'
AND usd.LOGOFFDATETIME IS NULL;
BEGIN
OPEN usersessiondetail_cur;
FOR vItems in usersessiondetail_cur
LOOP
EXECUTE IMMEDIATE 'UPDATE csh_UserSessionDetail
SET ClientID =vItems.CLIENTID
WHERE ClientID =vItems.CLIENTID
AND OperID =vItems.OPERID
AND Register =vItems.REGISTER
AND Machine_ID =vItems.MACHINE_ID
AND SessionNumber =vItems.SESSIONNUMBER';
END LOOP;
CLOSE usersessiondetail_cur;
END;
'cursor for'ループを使用しているときにカーソルを明示的にオープン/クローズしないでください(' OPEN usersessiondetail_cur')。この場合、動的SQL(「UPDATE」ステートメント)を使用する必要は全くありません。 –
動的SQLはまったく役に立たない。なぜあなたはそれを使用していますか? –
プロシージャをコンパイルしようとしてエラーが発生しましたか、実際に実行しようとしていますか?いずれにせよ、あなたはどのようにしていますか?どのクライアントやコマンドなど?あなたが得る完全なエラースタックは何ですか? (なぜ、あなたはただ一つの更新をするのではなく、なぜループを使用していますか?あなたの 'run'パラメータは何ですか?) –