开发PL/SQl的子程序和包 存储过程和函数

时间:2022-01-29 00:09:41


简化脚本
标准脚本
工作环境
SQLPLUS Command Window
SQLPLUS Test Window
语法要求

declare begain exception end
定义变量
var 名 数据类型
名 数据类型
使用变量
:名

赋值语句
exec:名 :=表达式
名 :=表达式
调用方法
exec 方法名(参数)
call  方法名(参数)


存储过程:子程序
create or replace procedure 名字
参数定义(名字 in out 数据类型 最后一个参数不用写逗号)
is
  变量定义
begin


[exception]


end;
create or replace procedure testNow is
  str varchar2(50);
begin
  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') into str from dual ;
dbms_output.put_line(str);
end testNow;




使用: 名字(参数) ;  exec  名字(参数);
Command Window 默认不开启dbms_output的输出  set serverout on;


 exec testNOW();
 set serverout on;








测试
begin
  -- Call the procedure
  testnow;
end;


2017-02-14 14:30:23


PL/SQL 如何进行测试?




create or replace procedure testBook 
  (au in varchar2) 
is
  str varchar2(50);
  cursor cur_bname(au_cur varchar2) is
    select * from busi_td_books t where t.author = au_cur;
begin
  for book in cur_bname(au) loop
    str := str || book.name || ',  ';
    
    end loop;
  dbms_output.put_line(str);
end ;




in  做输入参数 只能从调用方传递值给存储过程


out 做输出参数 只能从存储过程中传递值给调用方


in out 输入输出参数 值双向传递
1、根据位置传递:只写参数值,按照顺序依次传递
2、根据名字传递:参数名 =>值 值可以是常量,也可以是变量












在简易脚本中测试


clear;
var bname varchar2(500);


exec :bname := '123456';


exec testbook(:bname);


同义词:synonym
1、可以通过 用户名 .对象名 访问指定用户的指定对象
2、必须要有权限
3、语法:
create or replace synonym abc for SYS.ACCESS$;
4、在synonym 前面加public,创建公共关键字,关键字的定义所有用户都能使用。
create or replace public synonym abc for SYS.ACCESS$


Database-link dblink  


语法
  create datebase link 表连接变量名 
connect to 用户名 identified by "密码" 
using '机器名或者IP/实例名';


企业版 实例名字orcl 精简版 XE
-- Create database link 
create public database link 22
  connect to 332 identified by "22"
  using '22';


create table 表名
as
使用:
select * from 表的名字@用户名


注意:
   1、创建Database link的时候,用的用户名必须是对方的数据库的账号和密码
   2、机器名或者IP 实例名,也是对方的机器名 对方的IP 对方的实例名
   3、Dblink的权限,取决于创建时的账号密码,但是最大也只能对对方的表和视图进行增删改查。
   4、与双方的数据库版本类型没有关系,只要都是oracle就行。