当前位置:Gxlcms > 数据库问题 > PLSQL子程序即PLSQL块

PLSQL子程序即PLSQL块

时间:2021-07-01 10:21:17 帮助过:19人阅读


exec query_employee(7788,:name);

print name ;


eg4)带有IN OUT参数

create or replace procedure compute

(num1  IN OUT number)

eg5)给子程序传递变量和数据

create or replace procedure add_dept

(dno number,dname varchar2 default null,loc varchar2 default null)

is

begin

insert into dept values(dno,dname,loc);


传递变量

exec add_dept(50,‘sales‘,‘new youk‘);

exec add_dept(60);

exec add_dept(70,‘add‘);

exec add_dept(dname=>‘sals‘,dno=>50);

exec add_dept(dno=>60);

exec add_dept(70,dname=>‘dsldsf‘);


【过程函数的维护 】user_source;

建立了过程之后,Oracle会将过程名,源代码及其执行代码存放到数据字典中,当调用过程时,应用程序会按照其执行代码直接执行,而不需要重新解析过程代码,所以子程序优于执行直接sql语句

select text from user_source where name =‘ADD_DEPT‘;

drop procedure add_dept;

select object_name ,created,status from user_objects where object_type in (‘PROCEDURE‘,‘FUNCTION‘); user_objects包含了当前用户的所有对象。

【编译的排错】USER_ERRORS维护此用户当前的错误

show errors procedure procedure_name;

select line||‘/‘||position  ,text from user_errors where name=‘XXXNAME‘;


【函数和过程有个依赖关系】

依赖关系有直接还有间接,间接就是隔山打牛,直接你就懂了,引用了哪个对象,哪个对象就叫做被引用对象,两种方法确定关系,数据字典user_dependencies 和deptree ideptree后者可以确定直接还是间接依赖,唯一需要注意的是当修改了被引用对象的结构时,相关依赖对象就会变成无效状态,需要重新编译这些存储对象

alter procedure add_employee complie;

alter view dept10 complie;

alter function get_info complie;

http://aklaus.blog.51cto.com/9724632/1950055 这个说明替代变量的使用


【函数】用于返回特定的数据,语法如下

create or replace function function_name

(argument1 [model1] datatype1,

argument2 [model2] datatype2,

...)

return datatype

is|as

plsql block;

注意的是 函数的头部必须带有return字句,在函数体内至少存在一条return语句。

eg1)最简单的函数

SQL> create or replace function get_user
  2  return varchar2
  3  is
  4  v_user varchar2(10);
  5  begin
  6  select username into v_user from user_users;
  7  return v_user;
  8  end;
  9  /
SQL> var v1 varchar2(100);
SQL> exec :v1:=get_user;   利用替代变量及调用使用方法,有歧义的是exec :v1:get_user为什么执行完之后就显示了结果,有可能是环境变量问题
v1
---------
SCOTT

SQL> print v1
v1
---------
SCOTT

SQL> select get_user from dual;
GET_USER
--------------------------------------------------------------------------------
SCOTT
SQL> set serveroutput on;
SQL> exec dbms_output.put_line(get_user);
SCOTT
PL/SQL procedure successfully completed

之后的就是带参数IN OUT之类的用法 注意如果带了out参数,那么必须定义变量接收out参数的输出值,不能在sql语句中调用该函数。

【函数的使用限制】

函数必须返回数据,只能作为表达式的一部分调用,函数可以使用以下地方调用:

select命令

where跟having字句

connect by startwith order by 以及group by

insert values中

update set 中

sql语句中只能调用存储函数(服务器端的) 调用的函数只能带有输入参数,函数类型不能是plsql特有的数据类型如boolean table record 调用的函数不能包含insert update delete语句

本文出自 “运维邦” 博客,谢绝转载!

PLSQL子程序即PLSQL块

标签:create procedure   函数   function   过程   

人气教程排行