在pl/sql里面用select时必须配合into子句使用.(除非使用游标变量时不同)

DECLARE 
LANG_IND varchar2(10);
l_tmp varchar2(20);
begin
LANG_IND:='A';
SELECT  DECODE(LANG_IND,'D',ASSET_DESCRIPTION,'A',ALTERNATE_DESCRIPTION),ASSET_ID into l_tmp
FROM T_ASSET_MASTER WHERE ASSET_TYPE ='EQUIPMENT_TYPE' AND STATUS NOT IN ('D','X','I');
end;

解决方案 »

  1.   

    嗯,要用select..into..
    不过一楼这样能行么,select两个字段,怎么能into一个变量里去啊?
      

  2.   

    DECLARE 
    LANG_IND varchar2(10);
    l_tmp numeric;
    begin
    LANG_IND:='A';
    SELECT  ASSET_ID into l_tmp
    FROM T_ASSET_MASTER WHERE ASSET_TYPE ='EQUIPMENT_TYPE' AND STATUS NOT IN ('D','X','I');
    end;这样就会出现:
    DECLARE
    *
    ERROR 位于第 1 行:
    ORA-01422: 实际返回的行数超出请求的行数
    ORA-06512: 在line 8加上decode就会出现:
    ERROR 位于第 9 行:
    ORA-06550: 第 8 行, 第 50 列:
    PL/SQL: ORA-00923: 未找到预期 FROM 关键字
    ORA-06550: 第 8 行, 第 1 列:
    PL/SQL: SQL Statement ignored
      

  3.   

    如select a,b into l_a,l_b from table
      

  4.   

    返回的行数只能是一个的.也就是说一个值.如果要返回多行就用游标呗.SQL> DECLARE
      2  LANG_IND varchar2(10);
      3  l_tmp numeric;
      4  begin
      5  LANG_IND:='A';
      6  SELECT  0 into l_tmp
      7  FROM dual;
      8  dbms_output.put_line(l_tmp);
      9  end;
     10  /PL/SQL 过程成功完成
      

  5.   

    liuyi8903(风继续吹) 说得很全面!
      

  6.   

    SELECT INTO
    参见:
    SELECT, DECLARE
    CURSOR, FETCH
    语法:
    SELECT [DISTINCT | ALL] {* | item_1[, item_2]...}
    INTO {variable_1[, variable_2]... | record_1}
    FROM {table_1 | (subquery)} [alias]
    [, {table_2 | (subquery)} [alias]]...
    rest_of_select_statement;
    变量:
    item_1,...,item_n:SELECT INTO 语句选择并存入给定变量中的项。
    variable_1,...,variable_n:将保存数据的变量。
    record_1:用户定义的记录或 %ROWTYPE 记录使用 SELECT INTO 语句将行的值提取出并置放在该记录中。
    table_1,...,table_n:从其中选择数据的数据库表。
    sub_query:向SELECT INTO 语句提供值或侄集的SELECT语句。
    Alias:一般是SELECT语句中引用的表,或视图的短名字。
    column_1,...,column_n:指定将要被修改表的列。
    sql_expression:有效的 SQL 表达式。
    WHERE search_condition:有效的WHERE 子句,用于指定s将要被修改的行。
    CURRENT OF cursor_name:与cursor_name指定的游标相关的 FETCH 语句处理的当前行。
    rest_of_select_statement:在SELECT 语句中FROM子句之后的合法语句。
    例子:
    PL/SQL
    SELECT employee_name, employee_id,
    employee_title
    INTO e_name, e_id, e_title
    FROM employees
    WHERE employee_id = emp_id;