折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

说明:

为了让CYQ.Data 框架支持Oracle,这几天对Oracle进行了基本探索,并把中间遇到的问题轻轻的记录了下来,与大伙共享。

 

 

总共有三篇:

1:初折腾Oracle问题小记

2:初折腾Oracle问题小记二

3:就是本篇了:折腾Oracle问题小菜记(三)

 

本篇又有新突破,再记录一下:

 

1:自己写了一条分页存储过程,也是CYQ.Data默认产生的存储过程:

 

复制代码
create   or   replace  package MyPackage  as  
type MyCursor 
is  ref  cursor ;
procedure  SelectBase(pageIndex  int ,pageSize  int ,tableName  varchar2 ,whereStr  varchar2 ,
  resultCount out 
int , resultCursor out MyCursor);
end  MyPackage;

create   or   replace  package Body MyPackage  is
procedure  SelectBase(pageIndex  int ,pageSize  int ,tableName  varchar2 ,whereStr  varchar2 ,
  resultCount out 
int , resultCursor out MyCursor)
  
is
  
-- 定义变量
  newtableName  varchar2 ( 4000 );
  rowStart  
int ;
  rowEnd    
int ;
  mySql 
varchar2 ( 8000 );
  whereOnly 
varchar2 ( 8000 );
  OrderOnly 
varchar2 ( 400 );
  
begin
    newtableName:
= tableName;
    mySql:
= ' select count(*) from  ' || tableName;

    
    
if  whereStr  is   not   null   and  length(whereStr) > 0
      
then
          rowStart:
= instr(whereStr, ' order by ' );
         
if  rowStart > 0  
          
then
            whereOnly:
= substr(whereStr,  1 ,rowStart - 1 );     -- 取得条件 
            OrderOnly: = substr(whereStr,rowStart, length(whereStr) - rowStart + 1 );     -- 取得排序方式(order by 字段 方式) 
           else
            whereOnly:
= whereStr;
            OrderOnly:
= '' ;
            
end   if ;
           whereOnly:
= '  where  ' ||  whereOnly;
           mySql:
= mySql || whereOnly;
         
     
end   if ;
     
execute  immediate mySql  into  resultCount;
       
--  dbms_output.put_line('查询总条数SQL=>'||whereStr||'--'||mySql||resultCount); 
     -- 执行查询,查询总条数 
           


            
-- 不分页查所有
          
        
if  pageIndex = 0   and  pageSize = 0     
        
then  
        mySql:
= ' select * from  ' || tableName || whereOnly || OrderOnly;
       
else
-- 计算起始和结束索引

        rowStart:
= (pageIndex - 1 ) * pageSize + 1
        rowEnd:
= rowStart + pageSize - 1 ;
        mySql:
= ' select * from (select t.*,RowNum as rn from (select * from  ' || newtableName || whereOnly || OrderOnly || ' ) t) where rn between  ' || rowStart || '  and  ' || rowEnd;
      
        
end   if ;
    
open  ResultCursor  for  mySql;
   
-- dbms_output.put_line('SQL=>'||mySql); 
     end  SelectBase;
  
end  MyPackage;
复制代码

 

执行测试语句:

复制代码
  declare
  ResultCursor MyPackage.MyCursor;
  ResultCount 
int ;
  
begin
  MyPackage.SelectBase(
1 , 2 , ' USERS ' , ' id>1 order by id ' ,ResultCount,ResultCursor);
  
end ;
复制代码

 

说明:

为写这段存储过程历经了半天,需要看语法,又要调试,最后采用步步注释法才一条语句一条语句的写到最后。
测试调试也弄了半天,要定义游标传进去才行。

 

继续说明:

复制代码
Oracle里的存储过程的可以有Package,等于一个名称空间了。

存储过程的代码里面有几个小问题,oracle->比较->mssql:

1:|| 为链接符号即+号

2:instr 函数和sql的函数charindex函数一样,只是里面的头两个参数的顺序要反过来。

3:substr函数和sql的函数substring函数一样。

4:length函数和sql的函数len函数一样。

5:if ...then...else end if,   mssql里为 if begin end

6:“;"号一行语句一个,mssql里没有。
复制代码

 

 

 

 

2:数据库表/视图的字段结构查询:

复制代码
select  COLUMN_NAME  as  ColumnName,
Data_length
* 2   as  MaxSize,
case  NULLABLE  when   ' Y '   then   1   else   0   end   as  IsNullable,
0   as  ReadOnly,
DATA_TYPE 
as  SqlType
from  USER_TAB_COLS  where  TABLE_NAME = upper (:TableName)  order   by  COLUMN_ID
复制代码

 

3:存储过程参数放在另一个表,独立查询:

select  argument_Name  as  ColumnName, - 1   as  MaxSize, 0   as  IsNullable, 0   as  ReadOnly, ' int '   as  SqlType  from  user_arguments  where   object_name = upper (:TableName)

 

4:查询所有表/视图/存储过程

Select   object_name   From  user_objects  Where  object_type = ' TRIGGER ' -- 所有触发器
Select   object_name   From  user_objects  Where  object_type = ' PROCEDURE ' -- 所有存储过程
Select   object_name   From  user_objects  Where  object_type = ' VIEW ' -- 所有视图
Select   object_name   From  user_objects  Where  object_type = ' TABLE ' -- 所有表

 

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/09/28/1837692.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
21天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。
|
28天前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
42 0
|
4月前
|
Oracle 关系型数据库 BI
ORACLE Apex: EBS多组织结构 理解与配置
【8月更文挑战第11天】在Oracle Apex中理解和配置与EBS多组织结构相关内容需掌握:1) EBS多组织结构概念及组成部分,如法律实体、业务单位与库存组织;2) Oracle Apex与EBS集成的目的与方式,包括提供友好界面及自定义业务流程;3) 在Apex中配置多组织结构应用,涉及数据访问控制、页面报表设计及业务流程集成。整体而言,需精通EBS架构与Apex开发技术,以实现高效灵活的企业解决方案。
|
7月前
|
Oracle 关系型数据库 Java
Oracle 19c 查看隐含参数视图
Oracle 19c 查看隐含参数视图
103 7
|
6月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
185 0
|
7月前
|
SQL 监控 Oracle
Oracle 性能优化之AWR、ASH和ADDM(含报告生成和参数解读)
Oracle 性能优化之AWR、ASH和ADDM(含报告生成和参数解读)
|
7月前
修改oracle11g的awr快照参数
修改oracle11g的awr快照参数
48 0
|
1月前
|
存储 SQL NoSQL
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
41 5

推荐镜像

更多