我很少用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;              */

Oracle 写存储过程的一个模板还有一些基本的知识点的更多相关文章

  1. oracle学习-存储过程返回一个值,和返回一个结果集

    一.返回一个值 --创建存储过程 create or replace procedure sp_hu_test(spcode in varchar2,spname out varchar2)is be ...

  2. oracle 写存储过程有返回值时 注意在loop循环处添加返回值:=

    例子: create or replace procedure p_xl is v_count NUMBER(10); begin for rs in(select yhbh from dbyh) l ...

  3. 懵懂oracle之存储过程

    作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...

  4. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)

    (转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...

  5. 懵懂oracle之存储过程3--JOB详解

    在前面学习了存储过程的开发.调试之后,我们现在就需要来使用存储过程了.简单的使用,像上篇<懵懂oracle之存储过程2>中提到的存储过程调用,我们可以将写好的存储过程在另一个PL/SQL块 ...

  6. oracle的存储过程的作用

    oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...

  7. 2.5 Oracle之存储过程和MERGE INTO语句

    一.MERGE INTO语句 1.merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求.我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方 ...

  8. oracle数据库存储过程中NO_DATA_FOUND不起作用解决

    oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...

  9. Oracle的存储过程编程

    是一个可以用编程的方式来操作SQL的集合. | |目录 1什么是存储过程? 2存储过程的优点? 3存储过程的缺点? 4存储过程的用途? 5存储过程注意事项? 6如何写存储过程? 7如何执行存储过程? ...

随机推荐

  1. 三种实现Ajax的方式

    本文主要是比较三种实现Ajax的方式 1. prototype.js 2. jquery1.3.2.min.js 3. json2.js Java代码 收藏代码 后台处理程序(Servlet),访问路 ...

  2. 使用Log4j将程序日志实时写入Kafka

    第一部分 搭建Kafka环境 安装Kafka 下载:http://kafka.apache.org/downloads.html tar zxf kafka-<VERSION>.tgz c ...

  3. 创建工程常量 (OC中的宏定义)

    1.oc创建宏 文件 2.swift创建 常量文件 在swift中, 并非是预编译代码替换, 而是设置全局常量, 简单宏, 直接let 加常量名即可

  4. DELPHI中使用UNIDAC连接ORACLE数据库

    DELPHI中使用UNIDAC连接ORACLE数据库   最近在DELPHI中使用到UNIDAC连接到oracle数据库,这样可以不要安装oracle客户端,比较方便使用:所以简单学习了一下,主要是用 ...

  5. shell变量(字符串)间的连接

    shell变量(字符串)间的连接 对于变量或者字符串的连接,shell提供了相当简单的做法,比string的连接还要直接. 直接放到一起或用双引号即可. 例如$a, $b,有 c=$a$b c=$a& ...

  6. python学习(二) 列表和元组

    第2章  列表和元组 2.1 序列概论 python有六种内建的序列,本章讨论最常用的两种类型:列表和元组.其他的内建序列有字符串.Unicode字符串.buffer对象和xragne对象. 列表和元 ...

  7. Py修行路 python基础(六)前期基础整理

    计算机中,有且仅有CPU具有执行权限,能够执行指令的只有CPU! 人在应用程序上输入的文字或文本,叫做明文! 在屏幕上输入或是输出的是字符,计算机保存的是 有字符编码的 二进制数. 变量赋值规则:例如 ...

  8. js的console你知道多少

    js的console你知道多少? 列出所有的console属性 console.dir(console) 或者 console.dirxml(console) 记录代码执行时间 console.tim ...

  9. 泛型集合List<T>

  10. linux grep打印匹配的上下几行

    $grep -5 'parttern' inputfile //打印匹配行的前后5行 $grep -C 5 'parttern' inputfile //打印匹配行的前后5行 $grep -A 5 ' ...