Oracle存储过程的基本学习

oracle,存储,过程,基本,学习 · 浏览次数 : 30

小编点评

**存储过程学习摘要** **一、存储过程语法** ```sql CREATE OR REPLACE PROCEDURE procedure_name AS { cursor_name cursor for select query_result_columns from table_name where condition; -- body of stored procedure execute_statement; close_cursor; deallocate_cursor; } ``` **二、python学习** ```python import DBMS_OUTPUT # 连接数据库 dbms_output.connect("host=localhost;user=username;password=password;database=database_name") # 定义存储过程 cursor = dbms_output.cursor() # 定义游标 cursor = dbms_output.cursor() # 执行存储过程 cursor.execute("CREATE OR REPLACE PROCEDURE duplicationcheckAS STR VARCHAR2(5000); col_name VARCHAR2(100); col_cnt int; CURSOR TEMP IS SELECT table_name, column_name FROM zhaobsh003 ;") # 获取结果 for row in cursor: col_name = row[0] col_cnt = row[1] dbms_output.put_line(row[0] + ': ' + col_name + ' ' + str(col_cnt)) # 关闭连接 dbms_output.close() ``` **核心目标** 查询 Oracle 数据库中的主键数据,并防止部分数据迁移时出现问题。 **注意** * SET SERVEROUTPUT ON 打开输出,将允许您将数据打印到服务器上。 * SET pagesize 10000;和 SET linesize 10000;设置分页和显示数据大小。 * CREATE OR REPLACE PROCEDURE 存储过程允许您创建或替换已存在存储过程。

正文

Oracle存储过程的基本学习


摘要

这个简要学习应该会分为上下两部分
第一部分是存储过程的学习. 
第二部分是python的学习. 

核心目标是查询Oracle数据库中的主键数据.
如果有主键upper之后相同的数据查询出来.并且进行展示
避免部分数据迁移时出现问题. 

存储过程的语法以及主要注意事项-调试注意事项

建议将serveroutput 打开.
将 linesize和 pagesize 尽量加大一些. 
这样可以保证数据的显示和使用. 

SET SERVEROUTPUT ON;
set pagesize 10000;
set linesize 10000;

注意 SERVEROUTPUT ON 
是打开输出. 不打开:
DBMS_OUTPUT.PUT_LINE("Hello world")
是无法打印的. 
SET SERVEROUTPUT ON
exec DBMS_OUTPUT.PUT_LINE('Hello')

定义存储过程

SET SERVEROUTPUT ON;
set pagesize 10000;
set linesize 10000;
CREATE OR REPLACE PROCEDURE duplicationcheck
AS 
  STR VARCHAR2(5000);
  col_name VARCHAR2(100);
  col_cnt int;
  CURSOR TEMP IS  
  SELECT table_name, column_name 
 FROM   zhaobsh003 ;
BEGIN
    dbms_output.enable(1000000);
    FOR S IN TEMP LOOP
      STR := 'select count(upper('||S.column_name||')) as '||S.table_name||', upper('||S.column_name||') from '||S.table_name||' group by upper('||S.column_name||') having count(upper('||S.column_name||')) >1 ' ; 
     BEGIN
      EXECUTE IMMEDIATE STR into col_cnt,col_name; 
     EXCEPTION
       when others then 
       null ; 
     END;   
      dbms_output.put_line(S.table_name||': '||col_name||' '||col_cnt);
 END LOOP;
END duplicationcheck;
/
exec duplicationcheck ; 

存储过程的简单说明

CREATE OR REPLACE PROCEDURE something
# 创建存储过程的语法
AS
  STR VARCHAR2(5000);
  col_name VARCHAR2(100);
  col_cnt int;
# 定义变量
CURSOR TEMP IS 
SELECT TABLE_NAME,COLUMN_NAME FROM ZHAOBSH003
# 将变量注入到具体的变量里面去 CURSOR的游标处理. 
BEGIN
    # 这个开始循环, 将游标里面的内容进行循环. 
    FOR S IN TEMP LOOP
        STR := 'XXX';
    # 这个进行异常判断. 避免中断
    BEGIN
        EXECUTE IMMEDIATE STR into col_cnt,col_name;    
    EXCEPTION
    # 异常处理
         WHEN OTHERS THEN 
       NULL ; 
    END;
    # 打印出具体的结果
    dbms_output.put_line(S.table_name||': '||col_name||' '||col_cnt);
    # 对应LOOP 的终止
 END LOOP;
# 对应最上面的BENGIN进行终止.
END duplicationcheck;
/
# 这个命令是执行存储过程
exec duplicationcheck ; 

与Oracle存储过程的基本学习相似的内容:

Oracle存储过程的基本学习

Oracle存储过程的基本学习 摘要 这个简要学习应该会分为上下两部分 第一部分是存储过程的学习. 第二部分是python的学习. 核心目标是查询Oracle数据库中的主键数据. 如果有主键upper之后相同的数据查询出来.并且进行展示 避免部分数据迁移时出现问题. 存储过程的语法以及主要注意事项-

Python处理Oracle数据库的学习过程

Python处理Oracle数据库的学习过程 背景 产品数据存在一些大小写敏感的数据迁移到不敏感的数据库时出现报错的情况. 基于此, 我这边跟帅男同学学习了下Python的使用. 因为这一块一直比较菜.所以想着进行一下总计和备忘. 感谢帅男提供的支持与帮助. 环境安装 https://downloa

Oracle使用临时表与直接关联的性能比较

Oracle使用临时表与直接关联的性能比较 摘要 自己的数据库水平还是太low了. 之前有很多店理解过. 但是一直理解的不深入. 比如我们这边有很多使用临时表存储中间结果数据 然后对结果数据进行关联查询的 直接关联查询 SELECT col.TABLE_NAME, col.column_name F

C#/C++ 通过ODBC连接OceanBase Oracle租户

概述 近期我们项目正处于将Oracle数据库迁移到OceanBase Oracle租户模式的阶段。考虑到我们项目采用了C++和C#混合开发,并且使用了多种技术,因此存在多种数据库连接方式。然而,针对C#连接OceanBase的案例相对较少,因此我特意记录下这一过程。 开放数据库互连(ODBC)是微软

[转帖]Oracle创建用户和表空间

一、概述 1.数据库实际管理中,不同业务系统需要使用’不同的用户'进行管理维护和使用,这样做把业务数据和系统数据独立分开管理,利于数据库系统管理; 2.在数据库中创建业务系统用户时候,建议为用户创建指定的用户表空间,否则全部默认为user表空间存储,使得user表空间容易过大,不易管理、查询。 二、

[转帖]并发delete导致oracle死锁问题的解决

项目中有一个批处理任务,用来删除数据库中过期的数据(包括说话人的语音、模型、记录等),当程序被分布式部署后,就会有多个批处理线程同时进行删除,不过不同的线程,会根据元信息表得到不同的说话人信息,从而删除不同的数据,并不存在竞争的问题,但是,当项目使用oracle数据库在线上运行时,却频繁出现了ORA

Oracle JDK 和 OpenJDK 有什么区别?

摘自 JavaGuide (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异

PLS-00103: 出现符号 ")"在需要下列之一时

执行 Oracle 存储过程时,出现 “PLS-00103: 出现符号 ")"在需要下列之一时:”, ``` Cause: java.sql.SQLException: ORA-06550: 第 22 行, 第 4 列: PLS-00103: 出现符号 ")"在需要下列之一时: ( - + case

[转帖]Oracle优化案例:vfs_cache_pressure和min_free_kbytes解决RMAN挂起问题

https://www.modb.pro/db/34028 环境: Oracle 11gr2 + dataguard 512GB内存 + 128核cpu + 高性能存储服务器 uname -an Linux dbhost 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:

Oracle 查询用户下表名,表列数,表行数,表大小的SQL

最近想分析下数据库的信息, 然后写了这个SQL. 比较lowB一些. 因为Oracle的 deferred_segment_creation 参数的影响. 很多表如果是0行,那么是不会创建extents 存储信息. 所以很多取出来的表大小信息为空. 这也就导致了查询结果表大小为空的情况. 为了能够准