Что не так с этим PL / SQL? Переменная Bind * не объявлена

здесь:

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

4 ответов


есть:

set serveroutput on

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

подробнее здесь.


синтаксис переменных привязки формы: VARNAME используются в основном в SQL * Plus (за исключением переменных привязки для динамического SQL, я думаю). Для SQL * Developer, PL / SQL Developer или других приложений существует "&" для подстановки переменных:


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

EDIT: Мой плохой, код для Oracle SQL * Developer должен был быть:


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

вы должны выбрать все и выполнить его. Результат появится на панели "вывод скрипта".


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.


попробовать

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