web-dev-qa-db-ja.com

このPL / SQLの何が問題になっていますか?バインド変数*は宣言されていません

ここは:

declare
  v_str1   varchar2(80);
begin
  v_str1 := 'test';
  print :v_str1;
end

SQLDeveloperを使用してSQLワークシートで実行すると、次のようになります。

Bind Variable "v_str1" is NOT DECLARED
anonymous block completed
12
NitroxDM

とった:

set serveroutput on

declare
  v_str1   varchar2(80);    
begin
 v_str1 := 'test';
 dbms_output.put_line(v_str1);
end;

詳細はこちら

5
NitroxDM

printはPLSQL関数ではありません。出力を取得したい場合は、dbms_output.put_line(v_str1);を使用できます

set serveroutput on;    
declare v_str1 varchar2(80);
begin
    v_str1 := 'test'; 
    dbms_output.put_line(v_str1);
end;

:v_str1はバインド変数ですが、plsqlで宣言しないでください。宣言するときは、VARIABLEキーワードを使用する必要があります。

3
EREN

:VARNAME形式のバインド変数構文は、主にSQL * Plusで使用されます(動的SQLのバインド変数を除く)。 SQL * Developer、PL/SQL Developer、またはその他のアプリの場合、変数置換には「&」があります。


declare
  v_str1   varchar2(80);
begin
  v_str1 := &v_str;
  print v_str1;
end

編集: 残念ながら、Oracle SQL * Developerのコードは次のようになっているはずです。


set serveroutput on;
declare
  v_str1   varchar2(80);
begin
  v_str1 := '&v_str';
  dbms_output.put_line(v_str1);
end;

すべてを選択して実行する必要があります。結果は「スクリプト出力」パネルに表示されます。

試してみてください

declare
  v_str1   varchar2(80);
begin
  v_str1 := 'test';
  print v_str1;
end