>        set serveroutput on
>        set autoprint on;
>       declare
>       v_first_name employees.first_name%type;
>       v_street_address locations.street_address%type;
>       v_city locations.city%type;
>       v_postal_code locations.postal_code%type;
>       begin
>       select employee_id first_name,street_address,city,postal_code       into:b_employee_id,v_first_name,v_street_address,v_city,v_postal_code
>
>       from employees   natural join locations
>     where employee_id=156;    // how to get employee_id stored in b_employee_ud
>     dbms_output.put_line('the employee'||v_first_name ||' is located    at:'||v_street_address||   v_city ||v_postal_code );
>     end;
>     /

获取错误
错误报告:
ORA-06550:第7行,第134列:
pl/sql:ora-00913:值太多
ORA-06550:第7行,第1列:
pl/sql:sql语句被忽略
06550。00000-“行%s,列%s:\n%s”
*原因:通常是pl/sql编译错误。
*行动:
员工ID
一百五十六
我想使用存储在b_employee_id中的employee_id

最佳答案

首先,select子句中的comma后面缺少一个employee_id

select employee_id first_name,street_address,city,postal_code
into   :b_employee_id,v_first_name,v_street_address,v_city,v_postal_code

应该是
select employee_id, first_name,street_address,city,postal_code
into   :b_employee_id,v_first_name,v_street_address,v_city,v_postal_code

现在,回到要使用employee_id=156的部分
我想使用存储在b_employee_id中的employee_id
如果您的意图不是对要运行查询的雇员id进行硬编码(我是通过阅读where子句末尾的注释行来猜测的),那么您需要在where子句中使用替换变量,如下所示:
WHERE employee_id = :b_emp_id

这里的另一个假设是,在您试图从中检索记录的表中有一个员工的记录。不应在INTO clause的变量中使用替换变量。
如果您想以任何原因将INTO clause中返回的值重写为其他值,可以稍后在程序中使用另一个变量来执行此操作。

关于sql - 错误报告:ORA-06550:第7行,第134列:PL/SQL:ORA-00913:值太多ORA-06550:第7行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21670571/

10-11 05:06