2

私はPL/SQL単純な基本的なコードを書き始めたところです。コードの何が問題なのかわかりません。

DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=:role_test;
END;

私は得てORA-01008: not all variables boundいます。

以前に試しました:

DECLARE
role varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role;
END;

これにより、テーブルのすべての行が更新されました。まあ、これは正当化されました。しかし、テーブルと同じ変数名を使用したい場合はどうでしょうか。私も試しました:

role=:role;

しかし、同じエラーORA-01008

4

4 に答える 4

1

PL/SQLv$reserved_wordsなどで特定の単語を使用できるかどうかを判断するために、相談することができます。ROLE

select res_attr from v$reserved_words where keyword = 'ROLE';

このステートメントが行を返すという事実ROLEは、それが実際にキーワードであることを示しているため、PL/SQL では使用できません。ただし、これres_attr_N、その単語が表で属性名として使用できることを示しています。

tahiti.oracle.com の v$reserved_wordsも参照してください。

于 2013-11-06T06:18:43.977 に答える
1

列名と同じ変数名を使用したい場合は、次のような手順で試すことができます。

CREATE OR REPLACE PROCEDURE role_p(role VARCHAR2)
IS
BEGIN
     UPDATE veer_test SET project_id=1008422 WHERE role = role_p.role;
END;

実行するには:

EXECUTE role_p('Programmer');
于 2013-11-06T06:16:08.267 に答える
0

試してみて

DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role_test;
END;

これがうまくいきますように

于 2013-11-06T06:03:51.393 に答える