Oracle笔记 十、PL/SQL存储过程

简介:
--create or replace 创建或替换,如果存在就替换,不存在就创建
create or replace procedure p
is
  cursor c
  is
  select * from dept2 for update;
begin
  for row_record in c loop
    if (row_record.deptno = 30) then
      update dept2 set dname = substr(dname, 0, length(dname) - 3) where current of c;
    end if;
  end loop;
end;
 
exec p;
 
begin
p;
end;
 
--带参存储过程
--in 输入参数,不带in out 默认输入参数
--out 输出参数
--in out 同时带的是输入输入参数
create or replace procedure p2(
       a in number,
       b number,
       s_result out number,
       s_temp in out number
  )
is
begin
  if (a > b) then
    s_result := a;
  else
    s_result := b;
  end if;
  s_temp := s_temp + 3;
end;
 
--调用存储过程
declare
  v_a number := 4;
  v_b number := 6;
  v_result number;
  v_temp number := 5;
begin
  p2(v_a, v_b, v_result, v_temp);
  dbms_output.put_line(v_a);
  dbms_output.put_line(v_b);
  dbms_output.put_line(v_result);
  dbms_output.put_line(v_temp);
end;
 
---删除一个表的过程
create or replace procedure drop_table(tname varchar2)
as
  total int := 0;
begin
     select count(*) into total from user_tables 
            where table_name = upper(tname);
     if total >= 1 then
        execute immediate 'drop table '||tname; --此处必须用动态sql
     end if;
end;
select * from user_tables;
 
--递归存储过程
create or replace procedure pro_emp(sEmpno emp.empno%type, sLevel integer)
is
       cursor c is select * from emp where mgr = sEmpno;
       prefixStr varchar(255);
begin
  for i in 1..sLevel loop
    prefixStr := prefixStr || '----';
  end loop;
  
  for row_data in c loop
    dbms_output.put_line(prefixStr || row_data.ename);
    pro_emp(row_data.empno, sLevel + 1);
  end loop;
end;
 
select * from emp;
begin
  pro_emp(7839, 0);
end;





本文转自hoojo博客园博客,原文链接:http://www.cnblogs.com/hoojo/archive/2011/05/03/2035388.html,如需转载请自行联系原作者
目录
相关文章
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
777 8
|
存储 Oracle 关系型数据库
Oracle存储过程插入临时表优化与慢查询解决方法
优化是一个循序渐进的过程,就像雕刻一座雕像,需要不断地打磨和细化。所以,耐心一点,一步步试验这些方法,最终你将看到那个让你的临时表插入操作如同行云流水、快如闪电的美丽时刻。
695 14
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
816 6
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
存储 关系型数据库 MySQL
【YashanDB知识库】MySQL返回结果集的存储过程的改写方法
本文介绍了将MySQL存储过程改写至YashanDB的解决方案。由于MySQL存储过程可直接返回结果集,而YashanDB需通过返回SYS_REF_CURSOR的函数实现类似功能,因此需要对代码进行转换。示例中展示了如何将MySQL存储过程`proc1`改写为YashanDB函数,并调整JDBC应用代码以适配REF_CURSOR输出参数,从而正确获取查询结果。此方法确保了跨数据库场景下的兼容性与功能性。
|
存储 SQL NoSQL
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
361 5
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
374 3

推荐镜像

更多