oracle 打印存储过程中的语句

s5a0g9ez  于 2023-01-01  发布在  Oracle
关注(0)|答案(2)|浏览(213)

我写了一些代码来打印条件是真还是假,但是我不能得到真还是假的输出。为什么?
下面是代码:

create or replace PROCEDURE TET_STOP_DID 
IS 
result VARCHAR2(10);
LastGeneratedcode TET_LASTGENERATEDMASKCODE.Maskedcode%TYPE;

BEGIN
  select maskedcode into LastGeneratedcode from TET_LASTGENERATEDMASKCODE;
  IF (SUBSTR(LastGeneratedcode,5,5) !='ZZZZZ') then
  result := 'true';

  else
    result :='false';

    END IF;
END TET_STOP_DID;
13z8s7eq

13z8s7eq1#

你没有打印任何东西;您只需要将result变量设置为某个值,就可以了。不过,该过程看起来并不正确,因为如果表中有两行(或更多行),它将引发too_many_rows错误(如果表为空,则会引发no_data_found)。我认为您需要传递某个参数来限制获取的行数。
例如:

SQL> select * from tet_lastgeneratedmaskcode;

        ID MASK
---------- ----
         1 abcd
         2 fff

接受参数并处理异常的过程(这是相当"糟糕"的处理,只是为了说明需要注意什么):

SQL> create or replace procedure tet_stop_did
  2    (par_id in tet_lastgeneratedmaskcode.id%type)
  3  is
  4    result varchar2(10);
  5    lastgeneratedcode tet_lastgeneratedmaskcode.maskedcode%type;
  6  begin
  7    select maskedcode
  8      into lastgeneratedcode
  9      from tet_lastgeneratedmaskcode
 10      where id = par_id;
 11
 12    if substr(lastgeneratedcode, 5, 5) != 'ZZZZZ' then
 13       result := 'true';
 14    else
 15       result := 'false';
 16    end if;
 17
 18    dbms_output.put_line('Result = ' || result);
 19  exception
 20    when no_data_found then
 21      dbms_output.put_line('No rows for that ID');
 22    when too_many_rows then
 23      dbms_output.put_line('Two or more rows for that ID');
 24  end tet_stop_did;
 25  /

Procedure created.

测试:

SQL> set serveroutput on
SQL> exec tet_stop_did (1);
Result = false                        --> here's your result

PL/SQL procedure successfully completed.

SQL>
3phpmpom

3phpmpom2#

如果可以使用SERVEROUTPUT子句运行该过程,则可以在存储过程代码中插入DBMS_OUTPUT:

CREATE OR REPLACE PROCEDURE TET_STOP_DID 
IS 
     result VARCHAR2(10);
     LastGeneratedcode TET_LASTGENERATEDMASKCODE.Maskedcode%TYPE;

BEGIN

     select maskedcode into LastGeneratedcode from TET_LASTGENERATEDMASKCODE;
     
     IF (SUBSTR(LastGeneratedcode,5,5) !='ZZZZZ') then
        result := 'true';
     ELSE
        result := 'false';
     END IF;
     
     -- Print the output
     DBMS_OUTPUT.PUT_LINE(result);
         
END TET_STOP_DID;

然后从终端开始,它运行如下:

SQL> SET SERVEROUTPUT ON;
SQL> EXECUTE TET_STOP_DID
false

谢谢

相关问题