分享最近写的几个存储过程

CREATE OR REPLACE PROCEDURE BEATH_INSERT_BOOK_MAIN(
BK_ISBN IN VARCHAR2,
BK_NAME IN NVARCHAR2,
BK_AUTHOR IN NVARCHAR2,
BK_RCMD IN NUMBER,
BK_TYPE IN NUMBER,
BK_TYPELIST IN VARCHAR2,
BK_KEYWORD IN NVARCHAR2,
BK_REMARK IN NVARCHAR2,
BK_USERID IN NUMBER,
BK_PUBLISHTIME DATE ,
BK_PRESS IN NVARCHAR2,
BK_TREE IN CLOB,
BK_STATUS IN NUMBER,
BK_IMG IN NVARCHAR2,
BK_PRICE IN NUMBER ,
BK_STAR IN NUMBER,
BR_COUNTS IN NUMBER,
RESULTBKID OUT NUMBER) is

V_PID NUMBER;
V_CurrentBkid NUMBER;
V_COUNT NUMBER;

begin

SELECT MAX(BK_ID) INTO V_PID FROM BOOK_MAIN;
DBMS_OUTPUT.PUT_LINE(V_PID);
--获取该表中最大的bk_id

--开始插入数据
V_CURRENTBKID := BOOK_MAIN_SEQ.NEXTVAL;
INSERT INTO BOOK_MAIN VALUES(V_CURRENTBKID,
BK_ISBN,
BK_NAME,
BK_AUTHOR,
BK_RCMD,
BK_TYPE,
BK_TYPELIST,
BK_KEYWORD,
BK_REMARK,
BK_USERID,
SYSDATE,
BK_PUBLISHTIME,
BK_PRESS,
BK_TREE,
BK_STATUS,
BK_IMG,
BK_PRICE,
BK_STAR,
BR_COUNTS);

V_COUNT :=SQL%ROWCOUNT;
DBMS_OUTPUT.put_line(‘V_COUNT IS ‘||V_COUNT);
DBMS_OUTPUT.PUT_LINE( ‘插入数据条数: ‘||V_COUNT);

SELECT MAX(bk_id) INTO V_PID FROM BOOK_MAIN;
IF V_PID=NULL THEN
DBMS_OUTPUT.put_line(‘ERROR!‘);
END IF;
DBMS_OUTPUT.put_line(‘最大的 bk_id 是‘|| V_PID); --输出当前 最大的 bk_id
--判断是否插入成功
RESULTBKID := V_CurrentBkid;--返回主键id
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line( SQLCODE||SQLERRM);
V_COUNT :=SQL%ROWCOUNT;
DBMS_OUTPUT.put_line(‘V_COUNT IS ‘||V_COUNT);
DBMS_OUTPUT.PUT_LINE( ‘插入数据条数: ‘||V_COUNT);
DBMS_OUTPUT.put_line(‘最大的 bk_id 是‘|| V_PID);
COMMIT;

END BEATH_INSERT_BOOK_MAIN;

------------------------------------------------

CREATE OR REPLACE PROCEDURE BEACH_DELETE_BOOK_MIAN01 (V_TABNAME IN VARCHAR2 )
AS
V_SQL VARCHAR2(100);
RN NUMBER(10);
CURSOR CUR_BOOK IS SELECT FROM BOOK_MAIN01;
V_BOOK BOOK_MAIN01%ROWTYPE;

BEGIN
OPEN CUR_BOOK;
LOOP
DBMS_OUTPUT.PUT_LINE(SYSDATE);
FETCH CUR_BOOK INTO V_BOOK;
EXIT WHEN CUR_BOOK%NOTFOUND;
DBMS_OUTPUT.put_line(‘ BOOK_ID IS ‘V_BOOK.BK_ID ‘ BOOK_NAME IS ‘V_BOOK.BK_NAME);
END LOOP;
CLOSE CUR_BOOK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(‘ERROR‘);
DBMS_LOCK.SLEEP(10);
V_SQL=‘ DELETE FROM ‘ V_TABNAME‘ WHERE ROWNUM ‘ RN;
EXECUTE IMMEDIATE V_SQL ;
OPEN CUR_BOOK;
LOOP
DBMS_OUTPUT.PUT_LINE(SYSDATE);
FETCH CUR_BOOK INTO V_BOOK;
EXIT WHEN CUR_BOOK%NOTFOUND;
DBMS_OUTPUT.put_line(‘ BOOK_ID IS ‘V_BOOK.BK_ID ‘ BOOK_NAME IS ‘V_BOOK.BK_NAME);
END LOOP;
CLOSE CUR_BOOK;
END;

------------------------------------------------

CREATE OR REPLACE PROCEDURE BATCH_SELECT(
p_Sqlcols Varchar2, --选择列
p_Sqlfrom Varchar2, --表名OR连接查询
p_Outrecordcount Out Int, --返回总记录数
p_counts Out Sys_Refcursor) As
v_Sql Varchar2(3000);
p_Sqlselect Varchar2(3000);

Begin

----拼接SQL查询语句
p_Sqlselect := ‘select ‘ || p_Sqlcols || ‘ from ‘ || p_Sqlfrom ;
Dbms_Output.Put_Line(p_Sqlselect);

v_Sql := ‘SELECT * FROM ( ‘ || p_Sqlselect || ‘) ‘;

--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn

Dbms_Output.Put_Line(v_Sql);

Open p_counts For v_Sql;

exception when others then p_Outrecordcount := -1 ;

END BATCH_SELECT;

时间: 2024-11-08 19:11:53

分享最近写的几个存储过程的相关文章

分享我写的IOCP:源码+思路

首先说明,下面的代码仅是一个IOCP的demo,很多地方的设计非常差,当然也有一些设计还算可以:).此篇仅供对IOCP有些了解但又不深入的.需要一个稍微完整示例的.对网络编程感兴趣的同学参考.点击这里下载代码 整个程序的流程如下: 流程完全是无阻塞的,主线程里,将收到的消息全都一次性取出后,然后派发.所有欲发送的消息都缓存起来,等到更新的时候一起发送.有些地方代码没有完善,比如断开连接后,socket.内存等资源的关闭回收.要注意MAXRECEIVEDBUFFLENGTH这个宏,它是定义每个so

分享最近写的一个存储过程 SOLVE_LOCK

CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000); --定义 v_sql 接受抓取锁的sql语句V_SQL02 VARCHAR2(3000); KILL_SID NUMBER;KILL_SERIAL NUMBER; CUR_LOCK SYS_REFCURSOR; --定义游标变量,循环执行抓取锁的sql语句CUR_LOCK02 SYS_REFCURSOR; TYPE TP_LOCK IS RECORD( --定义 rec

自己写的通用分页存储过程

新手一个,写的最简单的存储过程分页,上代码吧,还请大神们多多调教! 1 USE [BMS] 2 GO 3 /****** Object: StoredProcedure [dbo].[Pages] Script Date: 12/21/2015 11:48:57 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER PROCEDURE [dbo].[Pages] 9 @page int, --当前页 10

分享自己写的JS版日期格式化和解析工具类,绝对好用!

前言 本来想模仿Java里面的SimpleDateFormat()对象的,但是感觉这样用起来不方便,所以还是直接写成单独的方法算了. 原文链接 日期格式化 使用说明 formatDate(date, fmt),其中fmt支持的格式有: y(年) M(月) d(日) q(季度) w(星期) H(24小时制的小时) h(12小时制的小时) m(分钟) s(秒) S(毫秒) 另外,字符的个数决定输出字符的长度,如,yy输出16,yyyy输出2016,ww输出周五,www输出星期五,等等. 代码 完整代

分享最近写的 两条sql语句

1. 搭建基本环境 插入测试数据 insert into jgdm (jgdm,jgmc)  values('12300000000','河南省');insert into jgdm (jgdm,jgmc) values('12300000005','河南省郑州市');commit; insert into jgdm(jgdm,jgmc) values(00300000000,'重庆市');insert into jgdm(jgdm,jgmc) values(00300000001,'重庆市石柱

写一个简单的存储过程实例的笔记

1,运行在phpmyadmin 上,用于插入数据,关联产品与运费表 1 /*定义存储过程分解符*/ 2 delimiter // 3 DROP PROCEDURE IF EXISTS doShipping// 4 CREATE PROCEDURE doShipping() 5 BEGIN 6 /*声明变量*/ 7 DECLARE no_more_record INT DEFAULT 0; 8 DECLARE i INT; 9 DECLARE entityId BIGINT(10); 10 /*创

写yi一个mysql存储过程

1 //存储过程,利用已知的经纬度查询其他帖子距离自己的距离.juli的算法是网上拿的 2 //如果存在就删除这个存储过程 3 >> drop procedure if exists `get_distance`; 4 //设置默认结束符为%% 5 >> delimiter %% 6 //开始创建语句,4个参数,in 表示输入值,可以省略:格式: in 变量名 类型 7 >> create procedure get_distance (in lng_put decim

写一个简单的存储过程

-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循环体; end while; */ create procedure add_calendar(a int) begin declare i int default 1; while i<=a DO -- 循环开始 INSERT INTO calendar(datelist) VALUES( add

创建三个表并写一个简单的存储过程