データベースにデータを入力するための SQL コードがいくつかありますが、これは問題なく動作します。
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (1, 1, 1);
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (2, 1, 1);
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (3, 1, 2);
EXECUTE RESET_SEQUENCE('DOCUMENT_ELEMENT_ID_SEQ', 4);
保守性を高めるために、いくつかのマジック ナンバーを変数に置き換えようとしています。これまで変数を使用したことはありませんが、PL/SQL ブロックを使用する必要があることを読んだことがあります。
DECLARE
ELEMENT_TEXT SMALLINT := 1;
ELEMENT_IMAGE SMALLINT := 2;
BEGIN
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (1, 1, ELEMENT_TEXT);
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (2, 1, ELEMENT_TEXT);
INSERT INTO PDF_DOCUMENT_ELEMENT (DOCUMENT_ELEMENT_ID, DOCUMENT_ID, ELEMENT_ID) VALUES (3, 1, ELEMENT_IMAGE);
EXECUTE RESET_SEQUENCE('DOCUMENT_ELEMENT_ID_SEQ', 4);
END;
/
これは、プロシージャ コールを除いて、問題なく動作します。
EXECUTE RESET_SEQUENCE('DOCUMENT_ELEMENT_ID_SEQ', 4);
*
ERROR en lÝnea 45:
ORA-06550: lÝnea 45, columna 9:
PLS-00103: Se ha encontrado el sÝmbolo "RESET_SEQUENCE" cuando se esperaba uno
de los siguientes:
:= . ( @ % ; immediate
El sÝmbolo ":=" ha sido sustituido por "RESET_SEQUENCE" para continuar.
PLS-00103 エラーは次のように解釈されます。
PLS-00103: 'string'が見つかりましたが、次のいずれかが必要です: 'string'
呼び出しを次のように変更すると:
EXECUTE IMMEDIATE RESET_SEQUENCE('DOCUMENTO_ELEMENTO_ID_SEQ', 4);
...私はこれを取得します:
PLS-00222: en este ßmbito no existe ninguna funci¾n cuyo nombre sea
'RESET_SEQUENCE'
ORA-06550: lÝnea 45, columna 1:
PL/SQL: Statement ignored
... 次のように変換します。
PLS-00222: この有効範囲には'string'という名前の関数が存在しません
私の質問は次のとおりです。
- 変数を正しく使用していますか、それとも最初の目標に対するより良い解決策がありますか?
- プロシージャ コールの構文で何を修正する必要がありますか?またその理由は何ですか?