错误报告:ORA-06550:第7行,第134列:PL / SQL:ORA-00913:值太多ORA-06550:第7行,

时间:2014-02-10 06:39:22

标签: sql database oracle11g procedural-programming procedural

>        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编译错误。 *操作:

b_employee_id

156

我想使用存储在b_employee_id

中的employee_id

1 个答案:

答案 0 :(得分:2)

首先,您在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

如果您的意图不是硬编码要运行查询的employee_id(我通过读取WHERE子句末尾的注释行来猜测),那么您需要在WHERE子句中使用替换变量,像这样:

WHERE employee_id = :b_emp_id

此处的另一个假设是,表中有一个记录,您尝试检索记录。您不应在INTO clause

的变量中使用替换变量

如果您想因任何原因将INTO clause中返回的值覆盖为某个其他值,您可以稍后在程序中使用另一个变量来执行此操作。