postgresql一般crud存储过程参考[转]
http://blog.csdn.net/cdnight/article/details/18082255
这里是一份经过再三调试测试而成功的postgres数据库单表crud存储过程,请注意,对于多结果的返回方式,请查看 getPageByCondition的书写方式,用的是refcursor,返回一个cursor,同时可以返回其他out,inout参数,但是 refcursor必须在事务中调用,所以java端的调用过程需要注意,好吧,我同时放出一份dal样板,大家可以直接copy来用。
- /******************************************************************
- * 表名:test3
- * Made by 码农下的天桥
- ******************************************************************/
- --use MYDB;--你可以指定自己的数据库
- /******************************************************************
- ****************************各种常用查询***************************
- ******************************************************************/
- ------------------------------------
- --用途:复杂形式的查询语句,用于查询分页数据。
- --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
- --以免出现sql注入。
- --参数说明:
- ---_offset int 需要取的记录的开始位置
- ---_limit int 需要获取记录的总条数,针对分页而言,就是分页的pagesize。
- ---_columns varchar(800) 需要获取的字段
- ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
- ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
- ---_totalCount int 返回总共记录条数。
- ---_totalPages int 返回总共页数。
- ------------------------------------
- create or replace function test3_getListByCondition(
- INOUT pageindex INT,
- INOUT pagesize INT,
- IN _columns VARCHAR(800),
- IN _where VARCHAR(800),
- IN _orderby VARCHAR(800),
- out _totalCount INT,
- out _totalPages INT)
- returns SETOF record
- AS
- $$
- DECLARE condition_columns VARCHAR(800);
- DECLARE condition_where varchar(800);
- DECLARE condition_orderby VARCHAR(800);
- DECLARE _dymatic_sql VARCHAR(1600);
- DECLARE _beginNO INT;
- DECLARE _dynamic_getCount varchar(1600);
- DECLARE _theOffset INT;
- DECLARE _tmpInt1 INT;
- BEGIN
- condition_where:=ltrim(rtrim(COALESCE(_where,'')));
- condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
- condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
- --分析传过来的参数,构造动态sql语句。
- IF "character_length"(condition_where)>0 THEN
- IF strpos(condition_where, 'where ')!=1 THEN
- condition_where:='where ' || condition_where;
- END IF;
- END IF;
- --order by 语句构造
- IF "character_length"(condition_orderby)>0 THEN
- IF strpos(condition_orderby, 'order ')!=1 THEN
- condition_orderby:='order by '||condition_orderby;
- END IF;
- END IF;
- --判断pageindex是否合法及pagesize是否合法
- IF pageindex<1 THEN
- pageindex:=1;
- END IF;
- IF pagesize<1 THEN
- pagesize:=20;
- END IF;
- _dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
- EXECUTE _dynamic_getCount INTO _totalCount;
- IF _totalCount<1 THEN
- pageindex:=1;
- RETURN;
- END IF;
- --计算总共页数
- _tmpInt1:=_totalCount%pagesize;
- IF _tmpInt1=0 THEN
- _totalPages:=_totalCount / pagesize;
- ELSE
- _totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
- END IF;
- IF _totalPages < pageindex then
- pageindex:=_totalPages;
- END IF;
- _theOffset:=(pageindex-1) * pagesize+1;
- _dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
- --raise info '动态构造语句为:%',_dymatic_sql;
- return query EXECUTE _dymatic_sql;
- END;
- $$ language plpgsql VOLATILE;
- ------------------------------------
- --用途:复杂形式的查询语句,用于查询多条记录数据。
- --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
- --以免出现sql注入。
- --参数说明:
- ---_offset int 需要取的记录的开始位置
- ---_limit int 需要获取记录的总条数,针对分页而言,就是分页的pagesize。
- ---_columns varchar(800) 需要获取的字段
- ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
- ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
- ---_totalCount int 返回总共记录条数。
- ------------------------------------
- create or replace function test3_getPageByCondition(
- INOUT pageindex INT,
- INOUT pagesize INT,
- IN _columns VARCHAR(800),
- IN _where VARCHAR(800),
- IN _orderby VARCHAR(800),
- out _totalCount INT,
- out _totalPages INT,
- out _refcursor refcursor
- )
- returns SETOF record
- AS
- $$
- DECLARE condition_columns VARCHAR(800);
- DECLARE condition_where varchar(800);
- DECLARE condition_orderby VARCHAR(800);
- DECLARE _dymatic_sql VARCHAR(1600);
- DECLARE _beginNO INT;
- DECLARE _dynamic_getCount varchar(1600);
- DECLARE _theOffset INT;
- DECLARE _tmpInt1 INT;
- BEGIN
- condition_where:=ltrim(rtrim(COALESCE(_where,'')));
- condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
- condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
- --分析传过来的参数,构造动态sql语句。
- IF "character_length"(condition_where)>0 THEN
- IF strpos(condition_where, 'where ')!=1 THEN
- condition_where:='where ' || condition_where;
- END IF;
- END IF;
- --order by 语句构造
- IF "character_length"(condition_orderby)>0 THEN
- IF strpos(condition_orderby, 'order ')!=1 THEN
- condition_orderby:='order by '||condition_orderby;
- END IF;
- END IF;
- --判断pageindex是否合法及pagesize是否合法
- IF pageindex<1 THEN
- pageindex:=1;
- END IF;
- IF pagesize<1 THEN
- pagesize:=20;
- END IF;
- _dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
- EXECUTE _dynamic_getCount INTO _totalCount;
- IF _totalCount<1 THEN
- pageindex:=1;
- RETURN;
- END IF;
- --计算总共页数
- _tmpInt1:=_totalCount%pagesize;
- IF _tmpInt1=0 THEN
- _totalPages:=_totalCount / pagesize;
- ELSE
- _totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
- END IF;
- IF _totalPages < pageindex then
- pageindex:=_totalPages;
- END IF;
- _theOffset:=(pageindex-1) * pagesize+1;
- _dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
- --raise info '动态构造语句为:%',_dymatic_sql;
- open _refcursor for EXECUTE _dymatic_sql;
- RETURN NEXT;
- END;
- $$ language plpgsql VOLATILE;
- ------------------------------------
- --用途:获取其中一条记录
- ------------------------------------
- create or replace function test3_getRecord(in _id integer)
- returns SETOF test3
- AS
- $$
- BEGIN
- return query select * from test3 where t3id=_id LIMIT 1 OFFSET 0;
- END;
- $$ LANGUAGE plpgsql VOLATILE;
- ------------------------------------
- --用途:复杂形式的查询语句,用于查询前面第几条记录,这个就相当好了
- --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
- --以免出现sql注入。
- --参数说明:
- ---_topN int 需要取的topN条记录。
- ---_columns varchar(800) 需要获取的字段
- ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
- ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
- ------------------------------------
- create or replace function test3_getTopNbyCondition(IN _topN int,IN _columns VARCHAR(800),IN _where VARCHAR(800),IN _orderby VARCHAR(800))
- returns SETOF test3
- AS
- $$
- DECLARE condition_columns VARCHAR(800);
- DECLARE condition_where varchar(800);
- DECLARE condition_orderby VARCHAR(800);
- DECLARE _dymatic_sql VARCHAR(1600);
- BEGIN
- condition_where:=ltrim(rtrim(COALESCE(_where,'')));
- condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
- condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
- --分析传过来的参数,构造动态sql语句。
- IF "character_length"(condition_where)>0 THEN
- IF strpos(condition_where, 'where ')!=1 THEN
- condition_where:='where ' || condition_where;
- END IF;
- END IF;
- --order by 语句构造
- IF "character_length"(condition_orderby)>0 THEN
- IF strpos(condition_orderby, 'order ')!=1 THEN
- condition_orderby:='order by '||condition_orderby;
- END IF;
- END IF;
- _dymatic_sql:='select '||condition_columns||' from test2 '||condition_where||' '||condition_orderby||' limit '||CAST(_topN as VARCHAR)|| ' offset 0 ';
- --raise info '动态构造语句为:%',_dymatic_sql;
- return query EXECUTE _dymatic_sql;
- END;
- $$ language plpgsql VOLATILE;
- /******************************************************************
- *****************************记录删除******************************
- ******************************************************************/
- ------------------------------------
- --用途:删除多条记录
- ------------------------------------
- create or replace function test3_DeleteList(in ids VARCHAR(800),out status boolean,out msg VARCHAR(200))
- returns record
- AS
- $$
- DECLARE _arr_ids int[];
- DECLARE _str_ids "text";
- DECLARE _str_sql VARCHAR(1600);
- DECLARE _effects int;
- BEGIN
- IF "character_length"(ids)<1 THEN
- status:=false;
- msg:='没有指定需要删除的数据!';
- return;
- end if;
- _arr_ids:=tools_str2intarray(ids, ',');
- _str_ids:=tools_stringify(_arr_ids,',');
- --pkey为主键,自增的整数, <@ 表示判断pkey是不是在数组里面。是不是很方便?
- /*动态构造执行*/
- --_str_sql:='DELETE FROM test3 where t3id in ('||_str_ids||') ;';
- --EXECUTE _str_sql;
- /*直接执行*/
- delete from test3 where t3id =ANY( _arr_ids);
- GET DIAGNOSTICS _effects = ROW_COUNT;
- IF _effects>0 THEN
- status:=true;
- msg:='成功删除'||_effects||'条记录!';
- ELSE
- status:=false;
- msg:='没有删除任何记录!';
- end if;
- END
- $$ LANGUAGE plpgsql VOLATILE;
- /******************************************************************
- ****************************添加及编辑*****************************
- ******************************************************************/
- ------------------------------------
- --用途:增加一条记录
- ------------------------------------
- create or replace function test3_Insert(
- in __t3name varchar(400) ,
- in __t_birthday date ,
- in __myage smallint ,
- in __isadmin boolean ,
- in __myintro text ,
- in __price float ,
- out __t3id integer,
- out _status boolean,
- out _msg varchar(200))
- returns record AS $$
- BEGIN
- Insert into test3
- (
- "t3name","t_birthday","myage","isadmin","myintro","price"
- )
- values(
- __t3name,__t_birthday,__myage,__isadmin,__myintro,__price
- );
- /*判断添加记录是否成功。*/
- if FOUND then
- _status:=true;
- _msg:='成功添加记录.';
- __t3id:=currval(pg_get_serial_sequence('test3', 't3id'));
- else
- _status:=false;
- _msg:='无法添加记录!';
- end if;
- end;
- $$ LANGUAGE plpgsql VOLATILE;
- ------------------------------------
- --用途:修改一条记录
- ------------------------------------
- create or replace function test3_Update(
- in __t3name varchar(400) ,
- in __t_birthday date ,
- in __myage smallint ,
- in __isadmin boolean ,
- in __myintro text ,
- in __price float ,
- in __t3id integer,
- out _status boolean,
- out _msg varchar(200))
- returns record AS $$
- BEGIN
- update test3 set
- "t3name"=__t3name,"t_birthday"=__t_birthday,"myage"=__myage,"isadmin"=__isadmin,"myintro"=__myintro,"price"=__price where t3id=__t3id;
- /*判断保存记录是否成功。*/
- if FOUND then
- _status:=true;
- _msg:='成功保存记录.';
- else
- _status:=false;
- _msg:='无法保存记录!';
- end if;
- end;
- $$ LANGUAGE plpgsql VOLATILE;
PostgreSQL
对应dal调用文件:
- package EasisWeb.DAL;
- import EasisWeb.config.DBPool;
- import Easis.Common.StringUtil;
- import Easis.util.DataRow;
- import Easis.util.DataTable;
- import Easis.util.DataTableHelper;
- import java.util.Date;
- import Easis.DBUtility.PooledConnection;
- import java.sql.*;
- import java.util.List;
- import java.util.ArrayList;
- import Easis.util.OperationResult;
- import Easis.util.PagerResult;
- import EasisWeb.Model.test3Model;
- /**
- * 这是利用CodeGen工具生成的自动访问数据库的一个模板,作者为“码农下的天桥”
- *生成的类名称:
- * @author 码农下的天桥
- * @version 1.00
- */
- public class test3DAL {
- /*表格各种column*/
- public static final String col_t3id="test3";
- public static final String col_t3name="test3";
- public static final String col_t_birthday="test3";
- public static final String col_myage="test3";
- public static final String col_isadmin="test3";
- public static final String col_myintro="test3";
- public static final String col_price="test3";
- public static final String PKColumn="t3id";
- /**
- *存储过程名称:test3_ListByCondition
- *存储过程参数:
- *@param pageindex
- *@param pagesize
- *@param columns 需要获取的字段
- *@param condition where条件语句
- *@param orderColumn order by排序语句
- *
- *@return 分页对象
- */
- public PagerResult getPageListByCondition(int pageindex,int pagesize, String columns, String condition, String orderColumn){
- PagerResult pres=new PagerResult();
- //output参数定义
- int _total = 0 ;
- int _pagesize = 0 ;
- int _pageindex = 0 ;
- int _totalpages = 0 ;
- //output参数定义结束
- //调用存储过程
- DataTable res__datatable=new DataTable();
- try{
- PooledConnection __myconn=DBPool.getConnection();
- __myconn.setAutoCommit(false); // return refcursor must within a transaction
- CallableStatement _stmt=__myconn.prepareCall("{ call test3_getPageByCondition( ?, ?, ?, ?, ?, ?, ?, ?)}");
- _stmt.setInt(1,pageindex);
- _stmt.setInt(2,pagesize);
- _stmt.registerOutParameter(1,Types.INTEGER);
- _stmt.registerOutParameter(2,Types.INTEGER);
- _stmt.setString(3,columns);
- _stmt.setString(4,condition);
- _stmt.setString(5,orderColumn);
- _stmt.registerOutParameter(6, Types.INTEGER);
- _stmt.registerOutParameter(7, Types.INTEGER);
- _stmt.registerOutParameter(8,Types.OTHER);
- _stmt.execute();
- ResultSet __rslist=(ResultSet)_stmt.getObject(8);
- res__datatable=DataTableHelper.rs2datatable(__rslist);
- //取回参数
- _total=_stmt.getInt(6);
- pres.totalrecords=_total;
- _pageindex=_stmt.getInt(1);
- pres.totalrecords=_total;
- _pagesize=_stmt.getInt(2);
- pres.pageindex=_pageindex;
- pres.pagesize=_pagesize;
- _totalpages=_stmt.getInt(7);
- pres.totalpages=_totalpages;
- pres.datasource=res__datatable;
- //--提交并还原
- __myconn.commit();
- __myconn.setAutoCommit(true); //返回游标必须在一个事务中,提交完以后将autocommit还原。
- //释放资源
- __rslist.close();
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- System.out.println("在运行[test3DAL]的List_Condition时候出现错误。");
- __e.printStackTrace();
- }
- return pres;
- }
- /**
- *存储过程名称:test3_Insert
- *存储过程参数:
- *param t3id 【主键】
- t3name
- t_birthday
- myage
- isadmin
- myintro
- price
- *
- *@return
- */
- public OperationResult Insert(test3Model model){
- OperationResult __ores=new OperationResult();
- /*output参数定义*/
- int t3id = 0 ;
- DataRow returnInfo=new DataRow();
- boolean status = false ;
- String message = "" ;
- /*output参数定义结束*/
- /*调用存储过程*/
- try{
- PooledConnection __myconn=DBPool.getConnection();
- CallableStatement _stmt=__myconn.prepareCall("{call test3_Insert(?,?,?,?,?,?,?,?,?)}");
- _stmt.setObject(1,model.t3name,Types.VARCHAR);
- _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
- _stmt.setObject(3,model.myage,Types.SMALLINT);
- _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
- _stmt.setObject(5,model.myintro,Types.VARCHAR);
- _stmt.setObject(6,model.price,Types.FLOAT);
- _stmt.registerOutParameter(7,Types.INTEGER,-1);
- _stmt.registerOutParameter(8, Types.BOOLEAN,1);
- _stmt.registerOutParameter(9, Types.VARCHAR,200);
- _stmt.execute();
- /*取回参数*/
- t3id=_stmt.getInt(7);
- status=_stmt.getBoolean(8);
- message=_stmt.getString(9);
- __ores.id= t3id;
- __ores.status=status;
- __ores.message=message;
- /*释放资源*/
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- __e.printStackTrace();
- __ores.message=__e.toString();
- }
- return __ores;
- }
- /**
- *存储过程名称:test3_Update
- *存储过程参数:
- * t3id【主键】
- t3name
- t_birthday
- myage
- isadmin
- myintro
- price
- *
- *@return
- */
- public OperationResult Update(test3Model model){
- OperationResult __ores=new OperationResult();
- /*output参数定义*/
- boolean status = false ;
- String message = "" ;
- /*output参数定义结束*/
- /*调用存储过程*/
- DataTable res__datatable=new DataTable();
- try{
- PooledConnection __myconn=DBPool.getConnection();
- CallableStatement _stmt=__myconn.prepareCall("{ call test3_Update( ?,?,?,?,?,?,?,?,?)}");
- _stmt.setObject(1,model.t3name,Types.VARCHAR);
- _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
- _stmt.setObject(3,model.myage,Types.SMALLINT);
- _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
- _stmt.setObject(5,model.myintro,Types.VARCHAR);
- _stmt.setObject(6,model.price,Types.FLOAT);
- _stmt.setInt(7,model.t3id);
- _stmt.registerOutParameter(8, Types.BOOLEAN,1);
- _stmt.registerOutParameter(9, Types.VARCHAR,400);
- _stmt.execute();
- /*取回参数*/
- status=_stmt.getBoolean(8);
- message=_stmt.getString(9);
- __ores.status=status;
- __ores.message=message;
- /*释放资源*/
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- __e.printStackTrace();
- }
- return __ores;
- }
- /**
- *存储过程名称:test3_DeleteList
- *存储过程参数:
- *@param ids 【参数名称:ids 参数类型:nvarchar 对应java类型:String 长度:400 】
- *
- *@return
- */
- public OperationResult DeleteList( String ids){
- /*output参数定义*/
- OperationResult __ores=new OperationResult();
- boolean status = false ;
- String message = "" ;
- /*output参数定义结束*/
- /*调用存储过程*/
- DataTable res__datatable=new DataTable();
- try{
- PooledConnection __myconn=DBPool.getConnection();
- CallableStatement _stmt=__myconn.prepareCall("{ call test3_DeleteList( ?, ?, ?)}");
- _stmt.setString(1,ids);
- _stmt.registerOutParameter(2, Types.BOOLEAN,1);
- _stmt.registerOutParameter(3, Types.VARCHAR,400);
- _stmt.execute();
- /*取回参数*/
- status=_stmt.getBoolean(2);
- message=_stmt.getString(3);
- __ores.status=status;
- __ores.message=message;
- /*释放资源*/
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- __e.printStackTrace();
- }
- return __ores;
- }
- /**
- *存储过程名称:test3_GetRecord
- *存储过程参数:
- *@param t3id 【参数名称:id 参数类型:int 对应java类型:int 长度:非字符类型 】
- *
- *@return DataTable对象。
- */
- public test3Model GetRecord( int t3id ){
- /*调用存储过程*/
- DataTable res__datatable=new DataTable();
- test3Model model=new test3Model();
- try{
- PooledConnection __myconn=DBPool.getConnection();
- CallableStatement _stmt=__myconn.prepareCall("{ call test3_GetRecord( ?)}");
- _stmt.setInt(1,t3id);
- ResultSet __rslist =_stmt.executeQuery();
- res__datatable=DataTableHelper.rs2datatable(__rslist);
- model=tryParseModel(res__datatable.get(0));
- /*释放资源*/
- __rslist.close();
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- __e.printStackTrace();
- }
- return model;
- }
- /**
- *存储过程名称:test3_Top_Condition
- *存储过程参数:
- *@param topN 【参数名称:topN 参数类型:int 对应java类型:int 长度:非字符类型 】
- *@param columns 【参数名称:columns 参数类型:nvarchar 对应java类型:String 长度:800 】
- *@param condition 【参数名称:condition 参数类型:nvarchar 对应java类型:String 长度:800 】
- *@param orderColumn 【参数名称:orderColumn 参数类型:nvarchar 对应java类型:String 长度:800 】
- *
- *@return DataTable对象。
- */
- public DataTable Top_Condition( int topN, String columns, String condition, String orderColumn ){
- /*调用存储过程*/
- DataTable res__datatable=new DataTable();
- try{
- PooledConnection __myconn=DBPool.getConnection();
- CallableStatement _stmt=__myconn.prepareCall("{ call test3_Top_Condition( ?, ?, ?, ?)}");
- _stmt.setInt(1,topN);
- _stmt.setString(2,columns);
- _stmt.setString(3,condition);
- _stmt.setString(4,orderColumn);
- ResultSet __rslist =_stmt.executeQuery();
- res__datatable=DataTableHelper.rs2datatable(__rslist);
- /*释放资源*/
- __rslist.close();
- _stmt.close();
- __myconn.close();}
- catch (Exception __e){
- __e.printStackTrace();
- }
- return res__datatable;
- }
- public test3Model tryParseModel(DataRow drow){
- test3Model model=new test3Model();
- if(drow==null){
- return model;
- }
- /*
- return "boolean";
- return "Date";
- return "double";
- return "float";
- return "int";
- return "long";
- return "String";
- return "Object";
- */
- /*尝试赋值*/
- model.t3id = drow.get("t3id").toInt();
- model.t3name = drow.get("t3name").toString();
- model.t_birthday = drow.get("t_birthday").toDate();
- model.myage = drow.get("myage").toInt();
- model.isadmin = drow.get("isadmin").toBoolean();
- model.myintro = drow.get("myintro").toString();
- model.price = drow.get("price").toFloat();
- return model;
- }
- public List<test3Model> tryParseList(List<DataRow> dataList){
- List<test3Model> modellist=new ArrayList<test3Model>();
- if(dataList==null){
- return modellist;
- }
- for(DataRow drow :dataList){
- modellist.add(tryParseModel(drow));
- }
- return modellist;
- }
- }
java
http://blog.csdn.net/cdnight/article/details/18078751
http://blog.csdn.net/cdnight/article/details/18001807
http://www.cnblogs.com/stephen-liu74/category/343171.html
postgresql一般crud存储过程参考[转]的更多相关文章
- 如何在SQL Server中生成和使用CRUD存储过程
在本文中,请参阅如何在SQL Server中生成和使用CRUD存储过程. 大多数数据库系统基于缩写CRUD调用的最简单的4种数据操作操作进行操作. 此首字母缩写词代表CREATE,READ,UPDAT ...
- postgresql PL/pgSQL—存储过程结构和变量声明
ref: https://www.postgresql.org/docs/9.6/static/plpgsql-structure.html 一. 函数结构 CREATE FUNCTION somef ...
- postgresql集群方案参考答案
PostgreSQL配置Streaming Replication集群 http://www.cnblogs.com/marsprj/archive/2013/03/04/2943373.html p ...
- MySql存储过程参考
Mysql(9)---纪录一次实际开发过程中用到的复杂存储过程 为了尽可能的还原当时为什么需要用到存储过程,下面我写了个详细的文档,我们可以从需求文档出发来分析. 有关存储过程之前也写了两篇文章来做铺 ...
- PostgreSQL函数(存储过程)----笔记
PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程 ...
- MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例
主要实例:把临时表tmp_table数据插入到目标表target_table 一.MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE I ...
- Postgresql 迁移随笔一
最近忙于MSSQL 迁移到Postgresql的工程,在这里记录一下迁移遇到的问题以及解法. 程序语言:java 要求,根据不同的driver可以同时支援多种数据库,目前主要为MSSQL 和Postg ...
- MSSQL 视图/事务(TRAN[SACTION])/存储过程(PROC[EDURE])/触发器(TRIGGER )
--视图 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同: 数据表是实际存储记录的地方, ...
- 通过arcgis在PostgreSQL中创建企业级地理数据库
部署环境: Win7 64位旗舰版 软件版本: PostgreSQL-9.1.3-2-windows-x64 Postgis-pg91x64-setup-2.0.6-1 Arcgis 10.1 SP1 ...
随机推荐
- HAproxy + keepalived 实现双机热备
一.HAProxy简介: HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...
- 开发笔记:python与随机数(转)
这些天需要用到从一堆数中随机提取几个数,于是重新研究了下random模块. 下面介绍下random中常见的函数. 前提:需要导入random模块 >>>import random 1 ...
- Java解读内存,优化编程
1.别用new Boolean 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装bool ...
- Spring MapFactoryBean例子
MapFactoryBean类为开发者提供了一种在Spring的bean配置文件中创建一个具体的Map集合类(HashMap和TreeMap). 这里有一个MapFactoryBean.例如,在运行时 ...
- 关于jQuery中的 offset() 和 position() 的用法
---恢复内容开始--- 在jQuery中有两个获取元素位置的方法offset()和position().position()方法是在1.2.6版本之后加入的,为什么要引入这个方法呢?这两个方法之间有 ...
- windows如何查看删除记录
方法 打开组策略中的计算机配置-Windows设置-安全设置-本地策略-审核策略的审核对对像防问, 双击出现的对话框中钩选成功和失败,经过上面的设置,现在就可以设置文件和文件夹的审核了.(注须在NTF ...
- Android 工程报错解决 Unable to resolve target 'android-17'
转自:http://www.cnblogs.com/csulennon/p/3705177.html 换了系统后,重新安装了Android SDK和ADT插件,导入之前的工作空间.居然发现所有的And ...
- 【GISER && Painter】Chapter00:OpenGL原理学习笔记
说明:简单了解一下OpenGL的工作原理,初步认识计算机对于图形渲染的底层设计与实现,第一次接触,也没学过C艹,欢迎各位批评指正. 一 什么是OpenGL? OpenGL是一个开放标准(specif ...
- 【GISER && Painter】矢量切片(Vector tile)番外一:Proj4js
说明:番外篇是对正篇矢量切片(Vector tile)中提到的一些值得继续延伸的关注点继续进行探索和学习,所涉及的内容以解决实际问题为主要导向. 一.新的需求? 在完成了矢量切片的工作后,新的需求出现 ...
- jQuery 对象和 DOM 对象
jQuery(DOM对象) 或者 $(DOM对象) 此函数的作用是将DOM对象,转换为jQuery的对象 DOM对象其实就是javascript的函数对象,可以用来操作所有HTML元素.比如: a标签 ...