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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介:

说明:

为了让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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
12月前
|
SQL Oracle 关系型数据库
Oracle的cursor_sharing参数详解
总的来说,cursor_sharing参数是一个非常重要的参数,它可以影响Oracle数据库的性能和稳定性。因此,我们需要根据我们的应用程序的特性和需求,以及我们的性能和稳定性的需求,来选择最合适的值。
493 23
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版产品使用合集之oracle cdc 抽取新增一张表 可以从savepoint恢复吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
188 0
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
357 1
|
SQL Oracle 关系型数据库
[oracle]使用impdp导入数据时卡在视图
[oracle]使用impdp导入数据时卡在视图
633 2
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之oracle无主键的表支持同步吗如何实现
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
205 3
|
Oracle 关系型数据库 Java
Oracle 19c 查看隐含参数视图
Oracle 19c 查看隐含参数视图
364 7

推荐镜像

更多
下一篇
开通oss服务