PLSQL CASE条件

Ara*_*rav 2 sql oracle plsql oracle10g ora-00923

我有两个问题.

查询1.

PL/SQL下面不起作用.我想将输出存储到varable test1和test2中.它说没有找到ORA-00923:FROM关键字.不确定有什么问题

DECLARE    
  file_id NUMBER(10) NOT NULL :=5;
  test1   varchar(100);
  test2   varchar(100);

BEGIN

  DBMS_OUTPUT.PUT_LINE('File Id: ' || file_id);

  SELECT table_name 
    INTO test1,
         (CASE owner
            WHEN 'SYS' THEN  'The owner is SYS'
            WHEN 'SYSTEM' THEN 'The owner is SYSTEM'
          END) 
    INTO test2 
    FROM all_tables 
   WHERE rownum <= 1;

END;
Run Code Online (Sandbox Code Playgroud)

查询2.

在PL/SQL中,如果我只使用没有into子句的select语句,它就不起作用了.这是我需要使用的规则吗?下面的一个不起作用.如果我想从PL/SQL程序假脱机输出,我是否需要将列的输出存储到变量中并执行dbms_output?

DECLARE

  file_id  NUMBER(10) NOT NULL :=5;
  test1 varchar(100);
  test2 varchar(100);

BEGIN

  DBMS_OUTPUT.PUT_LINE('File Id: ' || file_id);

  SELECT table_name,
         CASE owner
           WHEN 'SYS' THEN 'The owner is SYS'
           WHEN 'SYSTEM' THEN 'The owner is SYSTEM'
         END
    FROM all_tables;

END;
Run Code Online (Sandbox Code Playgroud)

Jef*_*emp 7

在PL/SQL查询中只需要一个INTO子句,例如:

SELECT table_name, CASE owner WHEN bla bla ... END
INTO test1, test2
FROM all_tables;
Run Code Online (Sandbox Code Playgroud)

  • 想一想:SQL查询的结果是一些数据.如果在SQL*Plus会话中单独运行SQL,SQL*Plus将获取结果并在屏幕上显示它们.在PL/SQL块中,您需要明确定义应将结果放在何处. (2认同)