java通过SQL获取几大关系型数据库的系统参数及存储过程

记录一次 各大关系型数据库 查询配置参数和 存储过程及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

你可能感兴趣的:(数据库)