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 ;