记录一次 各大关系型数据库 查询配置参数和 存储过程及sql定义语句查询
经验尚欠,不全面,纯个人记录。如有错误请指正。
MYSQL
//查询mysql数据库的参数配置
String sql= "show variables like '"+confName+"'";
//查询mysql数据库中的存储过程 函数
(filterSchemas为过滤掉系统表的 查询条件)
String sql="SELECT t.SPECIFIC_NAME,t.ROUTINE_DEFINITION FROM information_schema.ROUTINES t where t.ROUTINE_TYPE like '"+type+"' and t.ROUTINE_SCHEMA not in ("+filterSchemas+")";
type 为查询条件 存储过程PROCEDURE 函数FUNCTION
ORACLE
//查询oracle数据库的参数配置
String sql= "SELECT name, value FROM gv$parameter where name like '"+confName+"'";
//查询oracle数据库中的存储过程 函数
// String sql="select T.NAME ,replace(wm_concat(t.TEXT),',','')TEXT from ALL_SOURCE T WHERE T.TYPE='"+type+"' and T.OWNER NOT IN("+filterSchemas+") GROUP BY T.NAME";
由于oracle查询存储过程 你会发现 它换行一次就存一条记录 因此可以分组行转列拼接 返回
这里过滤掉了系统自带的模式,否则执行sql语句 会出现 字符缓存不够的异常。
因为oracle系统数据太多了
type 为查询条件 存储过程PROCEDURE 函数FUNCTION
PostgreSQL
//查询PostgreSQL数据库的参数配置
String sql= "SELECT name,setting FROM pg_settings where name like '"+confName+"'";
//PostgreSQL
String sql="select pg_proc.proname, pg_proc.prosrc from pg_proc ";
不区分存储过和函数
SQLServer
//查询sqlServer的参数配置
String sql= "SELECT CONVERT(varchar(200), name)name,CONVERT(varchar(200), value)value FROM sys.configurations where name like '"+confName+"'";
//查询存储过程 函数
" use "+db+" select a.name,b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in ("+type+")";
这里有个坑 java jdbc操作时候 记得当时报错 大意是类型不匹配什么的问题,需要用CONVERT函数转换一下来接收。
另外 use db 需要制定用哪个数据库 db :数据库名
(可以通过 Select Name FROM Master…SysDatabases 获取所有数据库名)
type 为查询条件 存储过程P 函数分两种 type="‘FN’,‘IF’";
DB2
暂时通过SQL查询配置的语句 目前知识并不知道
//查询存储过程和函数
String sql=" SELECT ROUTINENAME,TEXT from sysibm.sysroutines WHERE ROUTINETYPE='"+ type.substring(0,1)+"'";()
type 为查询条件 存储过程PROCEDURE 函数FUNCTION