我得到了以下实际执行以下操作的脚本,它使用了一个电子邮件地址
目前正在运作,但现在我想做以下事情:
用一种变量替换子选择“SELECT ID FROM DBSCHEMA.USERS WHERE EMAIL ='&SEARCH'
”,以便在脚本中多次放置(并执行)该语句。
但是我尝试过的东西都没用。 (开始使用DECLARE块 - 比线轴不工作,结束其他一切只是打破了脚本)
我正在使用oracle数据库 - 但如果可能,我想坚持使用通用命令。
DEFINE SEARCH='search@example.org';
spool OUTPUTFILE.out
prompt Start Searching by mail '&SEARCH'
SELECT
'ID;NAME;LAST_LOGIN;EMAIL_ADDRESS;FIRST_NAME;LAST_NAME;BLABLA;LANGUAGE_ID;'
FROM
DUAL;
SELECT
ID||';'||NAME||';'||LAST_LOGIN||';'||EMAIL||';'||FIRST_NAME||';'||LAST_NAME||';'||BLABLA||';'||LANGUAGE_ID||';'
FROM
DBSCHEMA.USERS
WHERE
EMAIL ='&SEARCH';
prompt Feedback messages
prompt ID;SUBJECT;MESSAGE;TIMESTAMP;
SELECT
ID||';'||SUBJECT||';'||MESSAGE||';'||TIMESTAMP||';'
FROM
DBSCHEMA.SITE_FEEDBACK
WHERE
USER_ID = (SELECT ID FROM DBSCHEMA.USERS WHERE EMAIL ='&SEARCH');
prompt Other Entries
prompt ID;TITLE;BLABLA;TIMESTAMP;
SELECT
ID||';'||TITLE||';'||BLABLA||';'||TIMESTAMP||';'
FROM
DBSCHEMA.SITE_ENTRY
WHERE
USER_ID = (SELECT ID FROM DBSCHEMA.USERS WHERE EMAIL ='&SEARCH');
spool off;
答案 0 :(得分:1)
search
如何填充?另外,你有什么版本的SQL * Plus?
在SQL * Plus中,您可以声明一个变量并在PL / SQL中填充它,就像这样(我已经使用了HR演示模式):
define search='VJONES';
var user_id number
begin
select employee_id into :user_id from employees where email = '&search';
exception
when no_data_found then
raise_application_error(-20001, 'No user found with email ''&search''.');
when too_many_rows then
raise_application_error(-20002, 'Multiple users found with email ''&search''.');
end;
/
select phone_number from employees where employee_id = :user_id;
PHONE_NUMBER
--------------------
650.501.4876
(您不必严格需要异常处理程序,但它会改进对无效或重复数据的处理。)
您还可以坚持使用define
变量:
column user_id new_value user_id
select employee_id as user_id from employees where email = '&search';
USER_ID
----------
195
1 row selected.
现在您已经定义并填充了&user_id
,您可以在查询中使用它:
select phone_number from employees where employee_id = &user_id;
PHONE_NUMBER
--------------------
650.501.4876
我不了解您的问题中有关无效或使用通用命令的部分。如果你能澄清那些我可以添加到我的答案。