我想用一段sql scripts, 从DB 读出某个值,
返回到其调用程序。
DECLARE
  supp_count NUMBER DEFAULT 0;
  max_batchno NUMBER  DEFAULT 0;
  batch_cnt   NUMBER  DEFAULT 0;BEGIN
  select count(1) into supp_count from eaggweb.AGG_STAGE1_ACCEPTED_SUPPLIER;
  IF  (supp_count!=0)
     THEN
       select max(batch_no) into  batch_cnt from eaggweb.AGG_STAGE1_ACCEPTED_SUPPLIER;
       max_batchno:= batch_cnt;
     ELSE
       max_batchno:=0;
  END IF;
  /////在此处返回_batchno,供父亲方法使用。
END;
/
exit
但是我不知道应该怎么返回。谢谢:)

解决方案 »

  1.   

    为什么不做成 FUNCTION / PROCEDURE?这样外部的脚本就可以调用它,获取到返回值了。。
      

  2.   

    写成funtion
    return batch_cnt ;
      

  3.   

    哦,
    谢谢两位:)俺属于入门级别的,对这个还不是很熟悉。在确认一下,是不是这种简单的script就无法返回任何直阿
      

  4.   

    对,你写的是一个脚本,执行完了就没有了,不返回任何东西,而且无法供其他程序调用。
    写成procedure或者function就可以返回,也可以调用。
      

  5.   

    不好意思,是俺自己没有说清楚,这是一个file ,名字为aa.sql. 
    可以在shell scripts 中调用, 使用sqlplus....另外,我想知道大家所说的那个function 是存在于哪里?一个专门的file ?怎么命名?
    我是想在shell script 中用的,该怎么调用呢?
    我见过oracle的存储过程的写法,在shell 中使用有什么区别么?多谢
      

  6.   

    看各位高手在,偶在说说这个东西的背景哈,以便能够更好的得到大家的帮助:)1,下面是原来的sql script:目的是返回tablename 中一个最大的batch_no值
    aa.sql
    set term off
    column batch_cnt noprint new_value total
    select max(batch_no) batch_cnt from tablename;
    set term on
    prompt &total
    exitcall aa.sql的方法就是在shell scripts 用 sqlplus username/pws@DBname @aa.sql2,问题是当tablename里没有任何纪录的时候,total返回的根本就是空的,
      在shell中无法使用,我的想法时,让total 在tablename里没有任何纪录的时候,返回0,
      
      

  7.   

    问题暂时解决了,
    在aa.sql 中 :select nvl(max(batch_no),0) batch_cnt from tablename; 
    这样就不会返回空值了。
    另外再script中也可以进行判断返回值是否为空,如果是,就赋值为0即可
    不过还是function比较方便,但是原来的程序是别人写的,需要改得太多了:(