当前位置: 首页 > news >正文

oracle存储过程

Oracle存储过程
1、无参,最简单存储过程

CREATE OR REPLACE PROCEDURE HELLO_WORLD IS  
BEGIN  DBMS_OUTPUT.PUT_LINE('Hello, World!');  
END HELLO_WORLD;  

输出

Hello, World!

2、输出查询语句
创建源数据
在这里插入图片描述

存储过程语句(求总薪资)

CREATE OR REPLACE PROCEDURE sum_salary
is
v_sum salary.salary%TYPE:=0;
CURSOR CURSOR_p IS SELECT salary FROM salary;
BEGIN FOR v_cursor IN CURSOR_p LOOPv_sum:=v_sum+v_cursor.salary;END LOOP;DBMS_OUTPUT.PUT_LINE('v_sum:'||v_sum);  
END;

调用存储过程

BEGIN 
sum_salary; 
END; 

命令行调用

exec  zhang.sum_salary; 

输出结果

v_sum:71000
SQL> exec  zhang.sum_salary; 
v_sum:71000

有参数调用
建表源数据
在这里插入图片描述
存储过程(有参数)

CREATE OR REPLACE PROCEDURE sum_salary
is
v_sum salary.salary%TYPE:=0;
CURSOR CURSOR_p IS SELECT salary FROM salary;
BEGIN FOR v_cursor IN CURSOR_p LOOPv_sum:=v_sum+v_cursor.salary;END LOOP;DBMS_OUTPUT.PUT_LINE('v_sum:'||v_sum);  
END;

调用存储过程1

DECLARE 
inp_continent PEOPLE.continent%TYPE;
resultpo PEOPLE.POPULATION%TYPE;
BEGINinp_continent:='Europ';sum_salary_1(inp_continent,resultpo);DBMS_OUTPUT.PUT_LINE('result:'||resultpo); 
END;

输出结果

result:14000

调用存储过程2

DECLARE 
inp_continent PEOPLE.continent%TYPE;
resultpo PEOPLE.POPULATION%TYPE;
BEGINinp_continent:='EUROP';sum_salary_1(inp_continent,resultpo);DBMS_OUTPUT.PUT_LINE('result:'||resultpo); 
END;

输出结果

result:40000

3、调用方式
CALL PROCEDURE_NAME: 是SQL标准的一部分,适用于在SQL命令行工具中调用存储过程,在调用存储过程时,可以传递输入参数和输出参数。
BEGIN …END :块是PL/SQL中的一种结构,提供了更大的灵活性和功能,适用于需要在调用存储过程的同时执行其他PL/SQL代码的情况,调用存储过程时,同样需要使用括号传递参数
EXECUTE PROCEDURE_NAME:是Oracle特有的,用于执行存储过程或函数,通常用于简单的存储过程调用,在使用EXECUTE语句时,可以传递输入参数,但通常不用于获取输出参数(尽管技术上可能)

存储过程(输入参数)

CREATE OR replace PROCEDURE create_table_de
IS
sql_statement varchar(300);
BEGINsql_statement:='CREATE  TABLE user_info24(id NUMBER,name varchar(20),address varchar(20))';EXECUTE IMMEDIATE sql_statement;
DBMS_OUTPUT.PUT_LINE('TABLE CREATED SUCCESSFULLY!');
EXCEPTION 
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR OCCURRED:'||SQLERRM);
END;

调用

CALL create_table_de();
TABLE CREATED SUCCESSFULLY!

创建插入数据存储过程

CREATE OR REPLACE PROCEDURE insert_tb(
table_name IN VARCHAR2,
column_values IN VARCHAR2
)
IS
sql_statament varchar(200);
BEGINsql_statament:='INSERT INTO'||table_name||'values('||column_definitions||')';execute immediate sql_statament;DBMS_OUTPUT.PUT_LINE('INSERT SUSCESSFULLY!');EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('ERROR OCCURRED:'||SQLERRM);
END;

调用

CALL insert_tb('user_info24','5,''zhang'',''guangzhou''');

注意:字段值使用的是两个单引号


http://www.mrgr.cn/news/49376.html

相关文章:

  • 位定时结构
  • 面试真题 | 百度C++研发工程师面经
  • 动态规划最大子段和讲解和【题解】——最大子段和
  • springcloud之服务提供与负载均衡调用 Eureka
  • 『香驰控股』上线采购数字化平台,企企通助推农业产业化国家重点龙头提升供应链价值
  • AttributeError: ‘str‘ Object Has No Attribute ‘x‘:字符串对象没有属性x的完美解决方法
  • 【优选算法篇】双指针的优雅舞步:C++ 算法世界的浪漫探索
  • 【C++】— 类和对象(3)
  • 麒麟系统离线安装英伟达驱动
  • ThreadLocal-共享变量
  • 【微服务】springboot远程docker进行debug调试使用详解
  • 为什么Python代码需要遵守Pythonic风格?
  • MarsCode--大数和距离【中等】
  • 基于Android的小型冷库管理系统(论文+源码)-kaic
  • 第二讲、C语言的常量和变量
  • 双向广搜 [NOIP2002 提高组] 字串变换————洛谷p1032
  • 基于单片机的 16 键多功能电子琴硬件设计
  • types.MethodType
  • 使用dotnet-counters和dotnet-dump 分析.NET Core 项目内存占用问题
  • Nodejs+Vue菜鸟驿站仓库管理系统的设计与实现 (论文+源码)-kaic