Oracle 写存储过程的一个模板还有一些基本的知识点

我很少用Oracle,也算新手,不过其实入手没有那么难,下面只是一个基本知识,高手绕道,其实数据库基本是相同的,这里提供都是基本知识点

有一个Oracle溢出的问题,容易让新手怀疑到无所怀疑,其实就是在做除法的时候长度太长导致,所以要用一个round来解决这个新手注意不到问题

其他的确实没有什么可说的看注释

declare  

vs_string  VARCHAR2(2000);

  vn_number  NUMBER;  

vc_cur     SYS_REFCURSOR;  

vl_row     wx_supplier%ROWTYPE;  

type type_wx_supplier is record(   id    NUMBER,   name VARCHAR2(200)   );

  vv_row      type_wx_supplier;

BEGIN  

dbms_output.put_line('begin');    

select wxs.* into vl_row from wx_supplier wxs where rownum=1;      

dbms_output.put_line('end;');    

end;

 /*      Cursor是游标类型,代表是数据集本身,只能在PL/SQL程序中关闭;可以通过游标FOR循环或者定义cursor来完成。  而sys_refCursor代表的是游标的引用,即数据集的引用地址,只能通过open for语句来完成。  两者的最大区别是后者可以将这个地址传递给其它程序。  问题:据说“ref cursor类型”也能够返回数据集,与sys_refCursor有什么关系?  回答: ref cursor是Oracle旧版本中使用的数据类型,用这种对象的缺点在于必须在包中定义;而现在用ys_refCursor类型,  可以直接使用。    

参考定义         vs_exc_sql            VARCHAR2(2000);

--执行结果判断动态语句     vn_count              NUMBER;

--判断计数          

type p_cursor is ref cursor;--老的orcal支持的游标    

curold              p_cursor;        

cur                  SYS_REFCURSOR;   

   tablenamerow         tablename%ROWTYPE; --表单数据行或是试图行

   type rec is record (     id   varchar2(200),    name   varchar2(200));  

  recdata rec;

//自定义行结构        参考语句        

select count(1) into vn_count from tablename --获取计数数量    

select NVL(fieldname, 'default') from tablename --提供默认值    

SELECT sys_guid() INTO vs_form_to_id FROM DUAL; --获取guid 获取常数等方式需要一个空表       

  获取一行数据  execute immediate 只支持单条数据     

EXECUTE IMMEDIATE 'select * from wk_my_bill where id in(select max(id) from wk_my_bill)' into vrowmybill;     dbms_output.put_line(tablenamerow.id);    

      通过rownum 或max 实现取一条数据     select mb.* into tablenamerow  from wk_my_bill mb where rownum=1; -- id in(select max(id) from wk_my_bill);       

  dbms_output.put_line(tablenamerow.id);     

    循环输出方式     OPEN cur FOR   后面可以接字符串,也可以接语句         

OPEN cur FOR    vs_result_sql;--'select * from v_tl_wk_action_codeinfo';        

  LOOP            fetch cur into empdtl;       

     exit when cur%notfound;           

dbms_output.put_line(empdtl.id);               

END LOOP;      CLOSE cur;         

For in 只能是语句不能是字符串       

For cu in (select * from v_tl_wk_action_codeinfo)     

loop        

dbms_output.put_line(cu.form_id);     

end loop;              

--using  可以给动态语句传值 :

1      更新或删除的记录变量 sql%rowcount         execute immediate 'insert into dept values   (:1, :2, :3)'         

using 50, l_depnam, l_loc;       

  commit;         --插入更新需要用commit         rowtype 以外可以用结构来定义获取混合关联数据输出        

  type empdtlrec is record (id   varchar2(200),                            

name   varchar2(200),                          

   need_remark   varchar2(200),                            

remark_title   varchar2(200));      empdtl empdtlrec;              */     

     

    

转载于:https://www.cnblogs.com/realso/p/7358842.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值