Greenplum创建存储过程
1.美图
1.对⽐
greenplum 的plpgsql
注意:
1. greenplum 的plpgsql 与 postgresql 不是完全兼容的。
2. plpgsql 不明确界定函数和存储过程,“returns void” 表⽰ 存储过程,“return 数据类型” 表⽰ 函数。
3. greenplum中的函数分成3种类型: immutable(不可变更的),stable(稳定的),volatile(易变的)。⽤户⾃定义的函数若没特别声明,默
认是volatile的。
4. plpgsql 不使⽤ commit,rollback 语句,否则运⾏时会报错,但是⼦程序可以编译成功即创建成功。
5. plpgsql 的动态语句 格式“execute <varchar变量的sql语句>”;plpgsql没有 execute [into <variable_list>] [using <variable_list>] 的写法,⽽
ORACLE的动态语句有 execute immediate [into <variable_list>] [using <variable_list>] 的写法。
6. plpgsql 不使⽤ 游标,⽽是⽤ for 循环代替。
7. plpgsql 的异常信息 变量: sqlstate,sqlerrm。没有sqlcode。
DB2 的 异常信息 变量:sqlcode,sqlstate,message_text。
ORACLE 的 异常信息 变量:sqlcode,sqlerrm。
#1.greenplum数据库准备好
创建表
CREATE TABLE table1 (
f1 text,
f2 numeric,
f3 integer
)
distributed by (f1);
添加数据
INSERT INTO table1 values
('test1', 14.1, 3),
('test2', 52.5, 2),
('test3', 32.22, 6),
('test4', 12.1, 4) ;
查看数据
select * from table1;
创建存储过程
有参数格式
create or replace function 存储过程名称(in 参数1 参数类型,in 参数2 参数类型,in 参数3 参数类型 ) returns 返回类型 as $$
begin
存储过程语句
end;greenplum数据库
$$ language plpgsql;
例如
create or replace function prc_test(in par1 text,in par2 numeric,in par3 integer)
returns void as $$
begin
insert into table1 values(par1,par2,par3);
end;
$$ language plpgsql;
调⽤
select prc_test('aa1',1,200);
再次查询语句
查询存储过程:
全局查,会到所有的名称相同的,会有⼀个到多个
select prosrc from pg_proc where proname="存储过程名称"
精准查
select t.prosrc from pg_proc t join pg_namespace t2 on t.pronamespace = t2.oid where t.proname = '存储过程名称' and t2.nspname='schema名称' select t.prosrc from pg_proc t join pg_namespace t2 on t.pronamespace = t2.oid where t.proname = 'prc_test' and t2.nspname='poc_dev'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论