当前位置:  数据库>oracle
本页文章导读:
    ▪ORACLE 创建多个游标并嵌套循环      需求:每遍历游标2的记录时分别去遍历游标1的数据,并替换后插入临时表CREATE OR REPLACE PROCEDURE TESTQISDownDictate VARCHAR2(200) DEFAULT '';t_IsExist NUMBER:=0;use_DownDictate VARCHAR2(200) DEFAULT '';BEGIN--判断指令.........
    ▪sql删除重复数据      一:创建表create table userinfo(  id int,  name varchar(10),  age int,  sex int,  address varcahr(50))二:添加数据insert into userinfo values(1,'admin','20,'1','上海市');insert into userinfo values(2,'admin','20,'1','上.........
    ▪Oracle 分析函数      分析ファンクション分析ファンクションは、行のグループに基づいて集計値を計算します。各グループに対して複数の行を戻す点で、集計ファンクションと異なります。行のグループをウ.........

[1]ORACLE 创建多个游标并嵌套循环
    来源:    发布时间: 2013-10-29

需求:每遍历游标2的记录时分别去遍历游标1的数据,并替换后插入临时表

CREATE OR REPLACE PROCEDURE TESTQ

IS

DownDictate VARCHAR2(200) DEFAULT '';

t_IsExist NUMBER:=0;

use_DownDictate VARCHAR2(200) DEFAULT '';

BEGIN

--判断指令是否会错误        

SELECT DOWNDICTATE INTO DownDictate FROM T_MS_AUTOPLANDICTATE WHERE PROCEDURENAME='PKG_MEDI_IMM.QUERY_MEDI_IMM';          

IF DownDictate IS NULL THEN          

RETURN;        

END IF;        

--开始定义游标

DECLARE   

---定义游标       1

CURSOR C_PARAMETERS IS           

SELECT FUNCTIONNODECODE,FUNCTIONNODENAME FROM T_MS_FUNCTIONNODES WHERE FUNCTIONID =            (SELECT FUNCTIONID FROM T_MS_FUNCTION WHERE FUNCTIONPROCE='PKG_MEDI_IMM.QUERY_MEDI_IMM');        

---定义游标          2

CURSOR C_MEDIIMME IS           

SELECT * FROM (  SELECT              A.GRANTMASTER_BARCODE,A.GRANTMASTER_DATE,B.UNITINFO_NAME,C.USERINFO_REALNAME FROM T_LABEL_GRANTMASTER A              LEFT OUTER JOIN T_ER_UNITINFO B ON A.GRANTMASTER_FARMID=B.UNITINFO_ID              LEFT OUTER JOIN T_SYS_USERINFO C ON A.GRANTMASTER_FARMERSID = C.USERINFO_ID              WHERE C.USERINFO_MOBILE IS NOT NULL OR C.USERINFO_PHONE IS NOT NULL) T;

--定义游标1的行定义

TYPE paraType IS RECORD(           

code     VARCHAR2(20),           

codecn   VARCHAR2(50)         

);         

paraRowType paraType;

---定义游标2的行定义

 TYPE rtype IS RECORD(            

yzpch    VARCHAR2(50),            

g_date   DATE,            

yzc  VARCHAR2(100),            

yznh   VARCHAR2(50)         

);         

c_rtype rtype;

 

--开始执行         

BEGIN           

OPEN C_MEDIIMME;        --打开游标 2              

LOOP            

FETCH C_MEDIIMME INTO c_rtype;            

EXIT WHEN C_MEDIIMME%NOTFOUND;            

use_DownDictate := DownDictate;            

OPEN C_PARAMETERS;       --打开游标1      (需要每遍历游标2的一条数据时打开一次游标1)

--遍历参数表            

BEGIN              

LOOP                

FETCH C_PARAMETERS INTO paraRowType;                

EXIT WHEN C_PARAMETERS%NOTFOUND;                

IF paraRowType.code = 'yzpch' THEN                   

use_DownDictate := REPLACE(use_DownDictate,paraRowType.codecn||'#',c_rtype.yzpch);                

ELSIF paraRowType.code = 'yznh' THEN                   

use_DownDictate := REPLACE(use_DownDictate,paraRowType.codecn||'#',c_rtype.yznh);                

ELSIF paraRowType.code = 'yzc' THEN                   

use_DownDictate := REPLACE(use_DownDictate,paraRowType.codecn||'#',c_rtype.yzc);                

END IF;              

END LOOP;             

END;             

CLOSE C_PARAMETERS;    --关闭游标1          

--插入临时表              

INSERT INTO T_MEDIIMMETABLE(ReplaceResult,DateResult)              

VALUES(use_DownDictate,c_rtype.g_date);            

END LOOP;                      

CLOSE C_MEDIIMME;  --关闭游标2       

END;

END TESTQ;

本文链接


    
[2]sql删除重复数据
    来源:    发布时间: 2013-10-29

一:创建表

create table userinfo

(

  id int,

  name varchar(10),

  age int,

  sex int,

  address varcahr(50)

)

二:添加数据

insert into userinfo values(1,'admin','20,'1','上海市');

insert into userinfo values(2,'admin','20,'1','上海市');

insert into userinfo values(3,'admin','20,'1','上海市');

insert into userinfo values(4,'admin','20,'1','上海市');

insert into userinfo values(4,'admin','20,'1','上海市');

commit;

三:查询重复的数据

select id, name,age,sex,address from userinfo where (name,age,sex,address) in (select name,age,sex,address from userinfo group by name,age,sex,address having count(1) > 1);

四:保留最小id的一行数据

select id, name,age,sex,address from userinfo where (name,age,sex,address) in (select name,age,sex,address from userinfo group by name,age,sex,address having count(1) > 1) and id not in(select min(id) from userinfo group by name,age,sex,address having count(1) >1);

五:删除重复数据

delete from usrinfo where id in (select id from userinfo where (name,age,sex,address) in (select name,age,sex,address from userinfo group by name,age,sex,address having count(1) > 1) and id not in(select min(id) from userinfo group by name,age,sex,address having count(1) >1));

commit;

注: 如果没有id,可以用oracle中的ROWNUM来添加虚拟的id;

本文链接


    
[3]Oracle 分析函数
    来源:    发布时间: 2013-10-29
分析ファンクション分析ファンクションは、行のグループに基づいて集計値を計算します。各グループに対して複数の行を戻す点で、集計ファンクションと異なります。行のグループをウィンドウといい、analytic_clauseで定義されます。各行に対して、行のスライディング・ウィンドウが定義されます。このウィンドウによって、カレント行の計算に使用される行の範囲が決定されます。ウィンドウの大きさは、行の物理数値または時間などのロジカル・インターバルに基づきます。分析ファンクションは、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合およびすべてのWHERE、GROUP BYおよびHAVING句は、分析ファンクションが処理される前に実行されます。そのため、分析ファンクションは、SELECT構文のリストまたはORDER BY句のみに指定できます。通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。-- 総合文法analytic_function::=    analytic_function([ arguments ])       --analytic_clause       OVER (        --query_partition_clause        [PARTITION BY          { value_expr[, value_expr ]...          | ( value_expr[, value_expr ]... )          } ]        --order_by_clause        [ ORDER [ SIBLINGS ] BY            { expr | position | c_alias }            [ ASC | DESC ]            [ NULLS FIRST | NULLS LAST ]              [, { expr | position | c_alias }                 [ ASC | DESC ]                 [ NULLS FIRST | NULLS LAST ]              ]...            --windowing_clause            [     { ROWS | RANGE }            { BETWEEN              { UNBOUNDED PRECEDING              | CURRENT ROW              | value_expr { PRECEDING | FOLLOWING }              }              AND              { UNBOUNDED FOLLOWING              | CURRENT ROW              | value_expr { PRECEDING | FOLLOWING }              }            | { UNBOUNDED PRECEDING              | CURRENT ROW              | value_expr PRECEDING              }            } ]         ]) --それぞれのクローズの文法analytic_function::=    analytic_function([ arguments ])       OVER (analytic_clause) analytic_clause::=    [ query_partition_clause ]    [ order_by_clause [ windowing_clause ] ] query_partition_clause::=    PARTITION BY      { value_expr[, value_expr ]...      | ( value_expr[, value_expr ]... )      } order_by_clause::=    ORDER [ SIBLINGS ] BY    { expr | position | c_alias }    [ ASC | DESC ]    [ NULLS FIRST | NULLS LAST ]      [, { expr | position | c_alias }         [ ASC | DESC ]         [ NULLS FIRST | NULLS LAST ]      ]... windowing_clause::=    { ROWS | RANGE }    { BETWEEN      { UNBOUNDED PRECEDING      | CURRENT ROW      | value_expr { PRECEDING | FOLLOWING }      }      AND      { UNBOUNDED FOLLOWING      | CURRENT ROW      | value_expr { PRECEDING | FOLLOWING }      }    | { UNBOUNDED PRECEDING      | CURRENT ROW      | value_expr PRECEDING      }    }analytic_function分析ファンクションの名前を指定します(セマンティクスの説明の後に示す分析ファンクションのリストを参照)。引数分析ファンクションには引数を0~3個指定します。引数には、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を指定できます。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換します。個々のファンクションに特に指定がないかぎり、戻り型もその引数のデータ型となります。参照:数値の優先順位の詳細は、「数値の優先順位」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。analytic_clauseOVER analytic_clause句は、ファンクションが問合せ結果セットを操作することを示します。FROM、WHERE、GROUP BYおよびHAVING句の後に計算されます。SELECT構文のリストのこの句またはORDER BY句に分析ファンクションを指定できます。分析ファンクションに基づいて、問合せの結果をフィルタするには、これらのファンクションを親問合せ内でネストした後、ネストされた副問合せの結果をフィルタします。analytic_clauseの注意事項:analytic_clause      
    
最新技术文章:
▪current online redo log缺失后的恢复
▪ORA-600 2662错误解决实例
▪ORA-00600 2662错误解决方法
▪Oracle Hidden Parameter:_allow_resetlogs_corruption
▪Oracle诊断事件列表
▪Oracle 隐含参数 _disable_logging 详解
▪ORA-00600 [2662]错误解决过程
▪Oracle里常见的执行计划
▪Oracle里另外一些典型的执行计划
▪Oracle服务器自动备份
▪Oracle固定SQL的执行计划(一)---SQL Profile
▪Oracle固定SQL的执行计划(二)---SPM
▪同一环境下新建Standby RAC库
▪Oracle快速克隆安装
▪Oracle单实例启动多个实例
▪Oracle的PLSQL别名中文出现乱码解决方法
▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
▪RMAN-06023: no backup or copy of datafile 16 found to restor...
▪RMAN还原数据库报错问题解决案例
▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
▪Oracle 性能优化建议
▪Oracle SQL语句优化心得
▪Oracle慢SQL监控脚本实现
▪Oracle dblink 查询 tns:无法解析指定的连接标识...
▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
▪Oracle 12C 开启数据库归档模式
▪Solairs系统中配置Oracle 12c 开机启动
▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
▪Oracle ASMM 与AMM之间相互切换
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3