--DBLINK
当用户要跨本地数据库去访问另一个数据库的数据时,本地数据库就必须创建了远程数据库的dblink,通过dblink可以像访问本地数据库一样访问远程数据库表中的数据,创建dblink的时候需要知道待读取数据库的地址,端口,实例名,用户名和密码。
语法如下:
create public link linkTest connect to username identified by password using '**.**.**.**:端口号/实例名';
在创建dblink之前,普通用户必须具有建立dblink的权限,查询权限语句如下:
select * from user_sys_privs a where a.privilege like '%LINK%';
如果不存在建立dblink权限的话, 则需要使用sys账户进行赋权,可以参考如下语句
grant create public database link,drop public database link to username
-- 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。
select xxx FROM 表名@数据库链接名;
--自定义function
语法如下:
create [or replace] function 函数名称(参数名称 参数类型,...)
return 结果变量数据类型
as/is
函数变量声明部分
begin
逻辑部分
return 结果变量
[exception
异常处理部分]
end[可带函数名称];
此次自定义函数练手,写了在函数内部执行动态sql和写逻辑语句(case...when...)两个,代码如下
--使用动态sql的写法
--入参不能声明长度
create or replace function hyfTest
(contract_type varchar2)
return varchar2
as
--临时变量必须声明长度
v_sqlstr varchar2(2000);
v_contract_type varchar(4);
futucode_type nvarchar2(10);
begin
v_contract_type := contract_type;
--注意单引号转义
v_sqlstr := 'select contract_model_code from username.contractmodel@linkTest where contract_type = '''||v_contract_type||'''';
execute immediate v_sqlstr into futucode_type;
return futucode_type;
exception
when others
then
return 'sql执行错误'||v_sqlstr;
end hyfTest;
--使用case语句的写法
create or replace function hyfTestCase
(contract_type varchar2)
return varchar2
as
futucode_type varchar(4);
begin
case contract_type
when '-' then
futucode_type := 'TT';
when 'e' then
futucode_type := 'SR';
else
futucode_type := ' ';
end case;
return (futucode_type);
end hyfTestCase;
总结下来
1、建立dblink还可以在plsql上通过图形化界面建立
2、自定义函数语法很重要,比如入参,变量的数据长度定义问题,动态sql语句中的单引号转义