Как использовать переменную подстановки в sqlplus? В состоянии - PullRequest
1 голос
/ 21 января 2020

Я столкнулся с ошибкой, когда я фактически использовал амперсанд для ввода, он не возвращает запись

Когда я жестко закодировал имя, он смог показать запись. Например, я ввел имя «клиент-то» с пробелом между ними.

Это связано с тем, что ввод не может принять пробел? Так как же решить, чтобы вернуть запись внутри IN?

WHERE
    name IN ('&name');

1 Ответ

1 голос
/ 21 января 2020

При появлении запроса заключите в кавычки строку подстановки, не указывайте текст подстановки в самом запросе.

SQL> select &message from dual;
Enter value for message: hello mom
old   1: select &message from dual
new   1: select hello mom from dual
select hello mom from dual
       *
ERROR at line 1:
ORA-00904: "HELLO": invalid identifier


SQL> select &message from dual;
Enter value for message: 'Hello, Mom!'
old   1: select &message from dual
new   1: select 'Hello, Mom!' from dual

'HELLO,MOM!
-----------
Hello, Mom!

SQL> create table so_ampersand (message varchar2(20));

Table created.

SQL> insert into so_ampersand values ('Hello, Mom!');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from so_ampersand where message in (&mess);
Enter value for mess: 'Hello, Mom!'
old   1: select * from so_ampersand where message in (&mess)
new   1: select * from so_ampersand where message in ('Hello, Mom!')

MESSAGE
--------------------
Hello, Mom!

SQL> 

Или наоборот ...

SQL> select * from so_ampersand where message in ('&mess2');
Enter value for mess2: Hello, Mom!
old   1: select * from so_ampersand where message in ('&mess2')
new   1: select * from so_ampersand where message in ('Hello, Mom!')

MESSAGE
--------------------
Hello, Mom!
...