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; */
Oracle 写存储过程的一个模板还有一些基本的知识点的更多相关文章
- oracle学习-存储过程返回一个值,和返回一个结果集
一.返回一个值 --创建存储过程 create or replace procedure sp_hu_test(spcode in varchar2,spname out varchar2)is be ...
- oracle 写存储过程有返回值时 注意在loop循环处添加返回值:=
例子: create or replace procedure p_xl is v_count NUMBER(10); begin for rs in(select yhbh from dbyh) l ...
- 懵懂oracle之存储过程
作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- 懵懂oracle之存储过程3--JOB详解
在前面学习了存储过程的开发.调试之后,我们现在就需要来使用存储过程了.简单的使用,像上篇<懵懂oracle之存储过程2>中提到的存储过程调用,我们可以将写好的存储过程在另一个PL/SQL块 ...
- oracle的存储过程的作用
oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...
- 2.5 Oracle之存储过程和MERGE INTO语句
一.MERGE INTO语句 1.merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求.我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方 ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- Oracle的存储过程编程
是一个可以用编程的方式来操作SQL的集合. | |目录 1什么是存储过程? 2存储过程的优点? 3存储过程的缺点? 4存储过程的用途? 5存储过程注意事项? 6如何写存储过程? 7如何执行存储过程? ...
随机推荐
- java中十进制转换为任意进制
次笔试时候遇到的关于十进制转换成十三进制的编程题. 先说说简单的思路吧: 1.十进制数 num 转换为 n进制 num%n结果肯定为n进制数的最后一位 结果存入一个数组中 2.进入一个循环num!=0 ...
- 解决Maven提示:Could not read settings.xml, assuming default values
本文转载自:http://blog.csdn.net/hqocshheqing/article/details/47702049 最近在学习Maven 时总是出现 Could not read se ...
- java从键盘输入若干数,求其最大值,最小值,平均值。等等
总结:有一定基础的人,应该发现第一个程序可以运行,其实它有个致命的错误.有谁能一眼看出来呢?第二个程序是对的. 这个题目求最大值,最小值,平均值我不会求,不知道这个if判断放在类的外面还是main函数 ...
- 1096 Consecutive Factors
题意: 给出一个正整数N,找到最长的连续的可分解因子.如N=630,可被分解为630=3*5*6*7,其中5*6*7是3个连续的因子. 思路: 首先,需要明确,对于任何一个整数,如果它是素数,则不可被 ...
- VC散列表
vc下有2个版本的散列表类,hash_map和unordered_map,hash_map位于stdext命名空间,unordered_map在std命名空间(vs2008及其之后的版本可用),官方推 ...
- 第三章 深入分析Java Web中的中文编码问题
3.1 几种常见的编码格式 3.1.1 为什么要编码 一个字节 byte只能表示0~255个符号,要表示更多的字符,需要编码. 3.1.2 如何翻译 ASCII码:有128个,用一个字节的低7位表示. ...
- Py修行路 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!
三元运算 条件判断不能加冒号: a=3 b=5 c=a if a<b else b oct() 转成八进制的简写:16进制 标志:BH为后缀或是0x为前缀hex() 转成16进制 元组 跟列表是 ...
- python's eleventh day for me
python2 中没有nonlocal. 函数名是什么? 函数名就是函数的名字, 本质:变量,特殊的变量. 1.单独打印函数名: def func(): print(666) print(func) ...
- linux进程的问题
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <pthread.h& ...
- Uboot详细解析1
uboot 详细注释讲解 声明:该贴是通过参考其他人的帖子整理出来,从中我加深了对uboot的理解,我知道对其他人一定也是有很大的帮助,不敢私藏,如果里面的注释有什么错误请给我回复,我再加以修改.有些 ...