Oracle 调用存储过程执行CRUD的小DEMO
-----------------------------修改(表名,主键ID,要修改的列)
create or replace procedure pro_code_edit(p_tbname in varchar2,p_ct_id in varchar2,p_codename in varchar2) as
p_str varchar2(400);
begin
p_str := 'update '||p_tbname||' set codename = '''||p_codeName||''' where ct_id = '''||p_ct_id||'''';
execute immediate p_str;
end;
--查询所有记录,直接返回游标 在调用处做下一步处理
create or replace procedure pro_code_queryall(p_tbname in varchar2,p_list out sys_refcursor ) as
begin
open p_list for 'select * from '||p_tbname||'';
end;
--查询单条记录(表名,主键,要查询的字段)
create or replace procedure pro_code_queryone(p_tbname in varchar2,p_ct_id in varchar2,
p_code out varchar2,p_codename out varchar2,p_fathercode out varchar2) as
v_code varchar2(40);
v_codename varchar2(40);
v_fathercode varchar2(40);
v_str varchar2(400);
begin
v_str:='select code,codename,fathercode from '||p_tbname||' where ct_id = :p' ;
execute immediate v_str into v_code,v_codename,v_fathercode using p_ct_id ;
p_code:=v_code;
p_codename:=v_codename;
p_fathercode:=v_fathercode;
end;
--删除记录(表名,主键值)
--这里的主键名称是通过命令查询出来的
create or replace procedure pro_code_remove(p_tbname in varchar2,p_ct_id in varchar2) as
v_str varchar2(400);
v_con_name varchar2(40);
v_pid varchar2(40):=trim(p_ct_id);
v_pk_column_name varchar2(40);
v_tbname varchar2(400):=upper(trim(p_tbname));
begin
select constraint_name into v_con_name from all_constraints where owner=upper('daily') and constraint_type = 'P'
and table_name=v_tbname;
select column_name into v_pk_column_name from all_cons_columns where owner=upper('daily') and table_name=v_tbname
and constraint_name = v_con_name;
v_str :='delete from doorkind where '||v_pk_column_name||' = :p ';
execute immediate v_str using v_pid;
end;
--保存记录(在这里由于数据设计的特殊之处,主键是按照规则自动生成的)
create or replace procedure pro_code_save(p_tbname in varchar2,p_codename in varchar2) as
v_codetype varchar2(100);
p_id varchar2(400);
p_str varchar2(400);
v_len number(10);
v_left varchar2(100);
v_right varchar2(100);
begin
v_codetype:=p_tbname;
p_str:='select max(ct_id) from '||v_codetype;
execute immediate p_str into p_id;
dbms_output.put_line(p_id);
select codetype,codelength into v_codetype,v_len from codenavigation where upper(codetype) = upper(v_codetype);
if p_id is not null then
v_left := regexp_substr(p_id,'[A-Za-z]+',1,1);
v_right := regexp_substr(p_id,'[0-9]+',1,1);
v_right := lpad(v_right + 1,v_len,'0');
else
v_left:=v_codetype;
v_right := lpad(1,v_len,'0');
end if;
p_id:=v_left||v_right;
dbms_output.put_line(p_id);
p_str:='insert into '||v_codetype||' '||' values('''||p_id||''','''||v_right||''','''||p_codeName||''','''||v_left||''')';
execute immediate p_str;
dbms_output.put_line(p_str);
end;
Oracle 调用存储过程执行CRUD的小DEMO的更多相关文章
- 【转】SQL2008 链接Oracle 调用存储过程
1. SQL链接ORACLE 都是可视化的操作 如下图: 红色框选的是oracle的数据驱动,如果没有这个驱动 那需要单独安装oracle的client端 装完以后就有了. 2.在创建之前,在SQLS ...
- myabatis oracle 调用存储过程返回list结果集
Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...
- hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确
hibernate的update()方法无法更新,不报错 原因是hibernate的update方法操作的是缓存,可以flush下先. 设置缓存为false理论上也可. 在一个serivce方法里,执 ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- [转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor
本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/ 今天学习了一个Oracle中的存储过程,一开始便被如果返回结 ...
- C#调用存储过程执行缓慢,但在数据库中执行却很快的问题
参考: http://www.debugease.com/mssqlbasic/976568.html https://www.cnblogs.com/Irving/p/3951220.html ht ...
- oracle调用存储过程和函数返回结果集
在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- Java代码调用存储过程和存储方法
准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安装位置,例如: 1.创建一个JDBC数据库连接工具类: package com.test.d ...
随机推荐
- HDU - 5036 Explosion
Problem Description Everyone knows Matt enjoys playing games very much. Now, he is playing such a ga ...
- graph driver-device mapper-04libdevmapper基本操作
// 创建thin pool // 调用路径:NewDeviceSet->initDevmapper->createPool 1.1 func createPool(poolName st ...
- Delphi - 闲来无事,自己写个Timer玩玩(多线程Timer)
明天去坐火车,回家,今天就没有事做,本来在弄一个跨进程获取其他程序里面组件,如ListView,ListBox,Button等的信息,突然有个想法自己写个Timer,不用SetTimer函数,我们自己 ...
- C陷阱与缺陷代码分析之第1章词法陷阱
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 编译器中负责将程序分解为一个一个符号的部分,称为“词法分析器”.下面看一个例子: if(x > big) bi ...
- Boost Thread学习笔记四
barrierbarrier类的接口定义如下: 1 class barrier : private boost::noncopyable // Exposition only 2 { 3 pub ...
- VC中添加web控件的方法
在VC中使用WebBrowser控件的两方法 黄森堂(vcmfc)著 ClassWizard方式: 1.创建包装类:View->ClassWizard->Add Class->For ...
- 爱的歌我uhegierhiuerh5怕哦一
http://www.huihui.cn/share/8424421 http://www.huihui.cn/share/8424375 http://www.huihui.cn/share/842 ...
- 14.2.5.5 Change Buffer
14.2.5.5 Change Buffer change buffer是一个指定的数据结构 用于caches 数据到secondary index pages 当影响的pages 不是在buffer ...
- 改变Edit的光标(使用CreateCaret,ShowCaret和LoadBitmap三个API函数)
看着Edit的光标,是不是觉得了无生趣,想不想换个形状来玩玩,其实很简单,且听我道来. Edit是Windows的标准控件,它是一个系统范围窗口类,所以任何应用程序都能创建它.其实Edit本质上也是一 ...
- [Android学习笔记]Android中多线程开发的一些概念
线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关 ...