1.登录postgresql

psql -h 192.168.137.131 -p 5432 postgres sa
tusc@6789#JKL

2.创建用户

CREATE USER name thunisoft createdb; --(equal CREATE ROLE name LOGIN createdb);

3.创建数据库
create database test_database owner = thunisoft;

4.查看帮助 psql 下敲help

[thunisoft@localhost ~]$ psql test_database
psql (9.3.6)
Type "help" for help. test_database=> help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
test_database=>

5.与其他数据库的类比

a.支持大多数的标准SQL.
b.支持复杂查询、外键、多版本并发控制、事务....
c.数据类型和函数十分丰富.

6.连接方式可以用Navicate Premium,当然还有自带的psql类似Oracle的sqlplus.

7.将Oracle存储过程迁移到PostgreSql 上.
PostgreSQL 支持多种过程语言,PostgreSQL原生的过程语言是pl/pgsql,还支持PL/Python,PL/perl等.
这里我们演示PL/pgsql(对原始脚本进行了删减和重命名)

Porcedure in Oracle:

 --抽数到结果表
procedure scheme_test_etl(in_scheme_id varchar2,
in_bbq varchar2,
table_Prefix varchar2) is
v_error_rows number;
v_row_cnt number;
v_bbq varchar2(10);
v_model varchar2(30);
v_table varchar2(32);
v_sql varchar2(3000); begin
v_bbq := in_bbq;
v_model := table_Prefix; /*临时表数据清理*/
execute immediate 'truncate table TEMP_EDQ10_DIM_LEVEL_ANAYS'; /*抽数到临时表*/
v_sql := 'insert into TEMP_EDQ10_DIM_LEVEL_ANAYS select * from ' ||
v_model || '_DIM_LEVEL_ANAYS';
execute immediate v_sql; --被检测表信息
v_table := v_model || '_checkedtb';
execute immediate 'delete from ' || v_table ||
' t where t.schemeid_ = ' || chr(39) || in_scheme_id ||
chr(39) || ' and t.bbq =' || v_bbq;
for c in (select t.PERIOD_ BBQ_,
t.SCHEMEID_,
t.HIERARCHY_, --数据级次
t2.facttableid_, --表名
100 - sum(nvl(DUETABLESCORE_, 0) - nvl(TABLESCORE_, 0)) table_score, --表分数
sum(nvl(t.TOTALCNT_, 0)) TOTALCNT_, --此期此户此规则全部数据行数 ==> 规则检查次数
sum(nvl(t.ERRORCNT_, 0)) ERRORCNT_ --错误数 ==>错误次数
from temp_EDQ10_STATISTICS t, EDQ10_RULES t2
where t.ruleid_ = t2.id_
group by t.PERIOD_,
t.SCHEMEID_,
t.HIERARCHY_,
t2.facttableid_) loop v_error_rows := get_scheme_error_rows(c.hierarchy_, c.facttableid_); --得到方案错误行数
v_row_cnt := get_scheme_total_rows(c.hierarchy_, c.facttableid_); --得到方案总数据行数 v_sql := 'insert into ' || v_table || '
(bbq,
SCHEMEID_,
hierarchy_,
checkedtable_score,
checkedtable_id,
checkedtable_rows,
error_rows,
checked_times,
error_times)
select :1,:2,:3,:4,:5,:6,:7,:8,:9 from dual';
execute immediate v_sql
using c.BBQ_, c.SCHEMEID_, c.HIERARCHY_, c.table_score, c.facttableid_, v_row_cnt, v_error_rows, c.TOTALCNT_, c.ERRORCNT_;
end loop; commit; exception
when others then
dbms_output.put_line(sqlcode || '--' || sqlerrm);
rollback;
end;

oracle procedure

function in PostgreSQL:

 create or replace function DataClaen_ETL.scheme_test_etl(in_scheme_id in varchar,in_bbq in varchar,table_Prefix in varchar)
returns void as $func$
declare
--抽数到结果表
v_error_rows numeric;
v_row_cnt numeric;
v_bbq varchar(10);
v_model varchar(30);
v_table varchar(32);
v_sql text; referrer_keys CURSOR IS
select t.period_ bbq,
t.SCHEMEID_,
t.hierarchy_, --数据级次
100 -
sum(t.DUERULESCORE_ - t.RULESCORE_) scheme_score, -- ==>方案得分
sum(t.TOTALCNT_) TOTALCNT_, --此期此户此规则全部数据行数 ==> 规则检查次数
sum(t.ERRORCNT_) error_times, --错误数 ==>错误次数
count(distinct t.ruleid_) scheme_rule_cnt, --方案规则总数
sum(case
when t.ERRORCNT_ = 0 then
0
else
1
end) error_rule_cnt --错误规则数
from temp_EDQ10_STATISTICS t
group by t.period_, t.SCHEMEID_, t.hierarchy_
order by t.period_, t.SCHEMEID_, t.hierarchy_; begin
v_bbq := in_bbq;
v_model := table_Prefix; /*临时表数据清理*/
execute 'truncate table TEMP_EDQ10_DIM_LEVEL_ANAYS';
/*抽数到临时表*/
v_sql := 'insert into TEMP_EDQ10_DIM_LEVEL_ANAYS select * from ' ||
v_model || '_DIM_LEVEL_ANAYS';
execute v_sql; --模型方案总览表
v_table := v_model || '_scheme_vi';
v_sql := 'delete from ' || v_table || ' t where t.schemeid_ = ' ||
chr(39) || in_scheme_id || chr(39) || ' and t.PERIOD_ =' ||chr(39)||v_bbq||chr(39); execute v_sql; for c in referrer_keys loop
v_error_rows := dataclaen_etl.get_scheme_error_rows(c.hierarchy_, 'AA'); --得到方案错误行数
v_row_cnt := dataclaen_etl.get_scheme_total_rows(c.hierarchy_, 'AA'); --得到方案总数据行数 execute '
insert into ' || v_table || '
(PERIOD_,
SCHEMEID_,
hierarchy_,
scheme_score,
row_cnt,
ERR_ROW_CNT,
ruler_checked_times,
error_times,
scheme_rule_cnt,
error_rule_cnt)
values ('||chr(39)||c.bbq||chr(39)||' , '||chr(39)||c.SCHEMEID_||chr(39)||' , '||c.hierarchy_||' , '||c.scheme_score||' ,'|| v_row_cnt||' ,'|| v_error_rows||' , '||c.totalcnt_||' , '||c.error_times||' ,'|| c.scheme_rule_cnt||' , '||c.error_rule_cnt||')';
end loop; $func$ language plpgsql;

PostgreSQL function

实现方式的差异性:
a.plpgsql没有package的概念(在oracle 中是用package来组织procedure和function的),用schema代替(即创建Schema DataClaen_ETL 而不是package DataClaen_ETL)。
b.PostgreSQL 没有Procedure,但是支持函数,与Oracle的function的功能相同,更厉害的是PostgreSQL的function支持 returns void,这个角度看来function与procedure无异。
c.PLpgsql 中游标必须先声明再使用,不支持Oracle For 循环直接定义的方式。
d.PLpgsql 必须指定函数开始和结束的标识符,且需要指定函数的实现语言(如此示例中 language plpgsql)
e.PostgreSQL 中没有dual伪表。
d.plpgsql 不支持自制事务,不能添加commit

移植Oracle procedure 到 postgresql的更多相关文章

  1. Ways to access Oracle Database in PostgreSQL

    Today, organizations stores information(data) in different database systems. Each database system ha ...

  2. Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration

    Installing and setting up Oracle GoldenGate connecting to an Oracle database Also please make sure t ...

  3. Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL

    今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成 ...

  4. Oracle procedure 基本语法

    转自:http://lorry1113.javaeye.com/blog/513851 关键字: oracle 存储过程 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程 ...

  5. Oracle procedure存储过程/function函数

    --函数的创建 create function func1(dno number) return NUMBER--必须带有返回值 is v_max number;--定义返回值 begin selec ...

  6. (转载)Oracle procedure 基本语法

    转自:http://www.cnblogs.com/wolfplan/p/4004624.html 关键字: oracle 存储过程 1.基本结构 CREATE OR REPLACE PROCEDUR ...

  7. Oracle迁移至PostgreSQL工具之Ora2Pg

    1. 描述 Ora2Pg是一个免费的工具,用于将Oracle数据库迁移到PostgreSQL兼容的模式.它连接您的Oracle数据库,自动扫描并提取它的结构或数据,然后生成可以装载到PostgreSQ ...

  8. Oracle Procedure记录

    1.定义 所谓存储过程(Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储 ...

  9. Oracle,mysql,sqlserver,postgresql语句几点比較

    1.分页 Oracle: SELECT * FROM(SELECT A.*, ROWNUM RN FROM (select T.* from sj_receiptinfo t WHERE t.TAXN ...

随机推荐

  1. 【Android 界面效果42】如何自定义字体

    项目里要统一用设计师的字体,android:typeface只支持系统三种字体.有什么比较好的做法? 你需要为整个应用替换自定义字体. 解决方案 1)Android默认方法 #1 你可以通过ID查找到 ...

  2. (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》

    移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...

  3. MySQL中/*!40100注释

    MySQL中的注释 MySQL中的注释有三种: # 注释内容 -- 注释内容 /* 注释内容*/ 但是,在导出的SQL文件中,也会看到类似如下内容的注释: CREATE DATABASE `blog` ...

  4. POJ 1751 Highways (最小生成树)

    Highways Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  5. 初识 Asp.Net内置对象之Application对象

    Application对象 Applocation对象用于共享应用程序级信息,即多个用户可以共享一个Applocation对象. 用户在请求Asp.Net文件时,将启动应用程序并且创建Applicat ...

  6. 【转】利用MVC模式开发Java应用程序[组图]

    Java是一种面向对象的语言,是实现面向对象编程的强大工具.我们在实际编程中,应该运用并发挥其最大效能.但是,要利用面向对象编程思想,自己独立开 发出好的Java应用程序,非凡是大.中型程序,并不是一 ...

  7. 删除utorrent广告栏

    自从utorrent附带广告栏后整个页面很难看,特别是右面下载详细列表变得支离破碎,今天实在是忍不了,网络搜索关键字“remove utorrent ads”,有效解决了问题. 具体如下:打开设置,选 ...

  8. Android webkit 事件传递流程详解

    前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...

  9. jquery与checkbox的checked属性的问题

    1.页面加载成功后,点击选中或取消选中该checkbox,checkbox属性里的checked属性不会根据该checkbox是否选中而变化 2.checkbox里的onchange或onclick方 ...

  10. 读书笔记-UIView与控件

    1.UIView 在Objective-C中,NSObject是所有类的“根”类.同样,在UIKit框架中,也存在一个如此神奇的类UIView.从继承关系上看,UIView是所有视图的根. 1.1.U ...