标签: plsql

如何在不使用Cursor的情况下编写以下pl/sql块?

我在pl/sql块中写了一个光标.如果它有更多记录,这个块需要花费很多时间.如何在没有光标的情况下写这个或者是否有其他可以减少时间的替代方法?是否有任何替代查询来执行插入到一个表并使用单个查询从另一个表中删除?

DECLARE
      MDLCursor SYS_REFCURSOR;
    BEGIN
      open MDLCursor for
        select dc.dest_id, dc.digits, dc.Effectivedate, dc.expirydate
          from DialCodes dc
         INNER JOIN MDL d
            ON dc.Dest_ID = d.Dest_ID
           AND d.PriceEntity = 1
          join sysmdl_calltypes s
            on s.call_type_id = v_CallType_ID
           and s.dest_id = dc.Dest_ID
           and s.call_type_id not in
               (select calltype_id from ignore_calltype_for_routing)
         order by length(dc.digits) desc, dc.digits desc;
      loop
        fetch MDLCursor
          into v_mdldest_id, v_mdldigits, v_mdlEffectiveDate, v_mdlExpDate;
        insert into tt_pendingcost_temp
          (Dest_ID,
           Digits,
           CCASDigits,
           Destination,
           tariff_id,
           NewCost,
           Effectivedate,
           ExpiryDate,
           previous,
           Currency)
          select v_mdldest_id,
                 Digits,
                 v_mdldigits,
                 Destination,
                 tariff_id, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle10g

0
推荐指数
1
解决办法
1904
查看次数

为什么这个SELECT花了2-3分钟,我怎么能把它减少到几秒钟?

select to_date(checks.payment_dte, 'YYYYMMDD') as payment_date,
       checks.run_number, 
       checks.check_nbr as check_number, 
       checks.check_amt as check_amount, 
       checks.payee_no as payee_number, 
       checks.loc as location, 
       checks.fac_state as facility_state, 
       checks.delta_usa_ind, 
       checks.payee_lnme as payee_last_name, 
       checks.payee_fnme as payee_first_name, 
       checks.payee_addr1 as payee_address1, 
       checks.payee_addr2 as payee_address2, 
       checks.payee_addr3 as payee_address3, 
       checks.payee_city, 
       checks.payee_st as payee_state, 
       to_char(checks.payee_zip, '00000') as payee_zip,
       to_char(checks.payee_zip4, '0000') as payee_zip4, 
       checks.payee_country_cde as payee_country_code,
       country.country_abbreviation as payee_country_code_description, 
       checks.maint_code as maintenance_code, 
       checks.mod_dte as mod_date, 
       checks.mod_op, 
       checks.payment_profile_id, 
       checks.bank_profile_id, 
       checks.parent_id
from (select c.*, 
             check_total
      from db1.tbl_payment_checks c
      join (select sum(net) as check_total, 
                   check_nbr
            from (select …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

0
推荐指数
1
解决办法
132
查看次数

SQL提取字段问题

我有一个A列,其中包含4个以'/'分隔的字段

example:  234-12-343/653423/MANAGER/yg@gmail.com
Run Code Online (Sandbox Code Playgroud)

想知道如何提取字段索引2?所以最终的输出将是653423.

(我的想法是使用正则表达式,但不知道如何做)

*数据库是Oracle 10g

我能够出来这些查询.谢谢您的帮助

select substr(ColumnA',
          regexp_instr(ColumnA,'[\/]',1,1,0) + 1,
          regexp_instr(ColumnA,'[\/]',1,2,0) - regexp_instr(ColumnA,1,1,0) - 1  ) 
          as test from dual
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

0
推荐指数
1
解决办法
692
查看次数

数字或值错误:字符到数字转换错误

create or replace
procedure prdBandwidth
is
    cursor c_bandwidth is select distinct mt.name bwname,b.circuitno circuitno,subapp.customerno customerno,netinfo.bandwidthtype bandwidthtype from wom.tbltsubscriberapplication subapp,wom.tbltllnetworkinfo netinfo,wom.tblmmastertype mt,(select max(applicationdate) as maxdate,circuitno,customerno from wom.TBLTSUBSCRIBERAPPLICATION,tblmaccount where nodename='End' and accountnumber=customerno group by circuitno, customerno) b  where subapp.applicationdate=b.maxdate and  subapp.circuitno=b.circuitno and subapp.llnetworkinfoid=netinfo.id and netinfo.bandwidthtype=mt.id;
    bwtype varchar2(6);
    bwtypelen number;
    bwtypesublen number;
    bwvalue varchar2(8);
      kbpsdata number;
begin
  DBMS_OUTPUT.PUT_LINE('hhahahahah');
  for crs_bandwidth in c_bandwidth
  loop 
    bwtypelen:=length(crs_bandwidth.bwname);
    DBMS_OUTPUT.PUT_LINE('bwtypelen:::'+bwtypelen);
    bwtype:=substr(crs_bandwidth.bwname,-4,4);
    DBMS_OUTPUT.PUT_LINE('bwtype:::'+bwtype);
    bwtypesublen:=length(bwtype);
     DBMS_OUTPUT.PUT_LINE('bwtypesublen:::'+bwtypesublen);
    bwtypesublen:=bwtypesublen-1;
     DBMS_OUTPUT.PUT_LINE('bwtypesublen:::'+bwtypesublen);
    bwvalue:=substr(crs_bandwidth.bwname,bwtypesublen,bwtypesublen);
    DBMS_OUTPUT.PUT_LINE('bwvalue:::'+bwvalue);
    if bwtype='mbps' then
        DBMS_OUTPUT.PUT_LINE('bwtype in if condition:::'+bwvalue);
        bwvalue:=bwvalue*1024;
        DBMS_OUTPUT.PUT_LINE('bwtype in …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ora-06502

0
推荐指数
1
解决办法
3558
查看次数

在PL/SQL包中声明全局异常

我在包中有一些过程/函数,-2291当违反FOREIGN KEY约束时捕获异常.

我从不同的过程中删除了异常,并在包体中声明它,如下所示:

e_ouder_niet_gevonden EXCEPTION;
PRAGMA EXCEPTION_INIT(e_ouder_niet_gevonden,-2291);
Run Code Online (Sandbox Code Playgroud)

现在当我使用包中的一个过程时没有问题.但是,我想要实现的是任何过程/函数都可以使用该异常.我该怎么做呢?

sql oracle plsql exception package

0
推荐指数
1
解决办法
4385
查看次数

Oracle 11g PL/SQL Diana节点限制

我有一个如下所示的声明,但它一次填写1000个电话.任何结果都会引发PLS-123错误程序太大戴安娜节点

begin
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
end
Run Code Online (Sandbox Code Playgroud)

我们正在转向11g,我想知道这种限制是否可以增加到2000例如.

谢谢

oracle plsql oracle11g

0
推荐指数
1
解决办法
1102
查看次数

设置开发环境以学习PL/SQL

我想设置一个沙盒环境来磨练我的pl/sql和数据库技能.我正在考虑下载完整版的Oracle 11G并使用SQL Developer.设置测试数据库并从那里开始工作.

有什么建议?你认为这是一个好方法吗?

先感谢您!

sql oracle plsql

0
推荐指数
1
解决办法
3933
查看次数

PLSQL遇到了符号"end-offile"...... PLS-00103

我在PL SQL上很新,当我尝试写下面的代码时:

BEGIN FOR foo IN (SELECT A, B, C FROM foo_table WHERE some_conditions) LOOP
DBMS_OUTPUT.PUT_LINE('sth here')
END LOOP;
Run Code Online (Sandbox Code Playgroud)

在SQL Developer中执行statment时出现以下错误

当期望是以下一个时遇到符号"文件结束":开始案例声明结束例外以及更多...

我的陈述有什么问题?任何人都可以给我一个提示如何解决这个问题?所有提示我都会很高兴.

sql oracle plsql plsqldeveloper pls-00103

0
推荐指数
1
解决办法
1636
查看次数

使用Oracle在同一文件上写入

我怎样才能使用相同的文件(如ABC.txt)来编写UTL_FILE.

目前正在发生的事情是,当我试图写上ABC.txt一个条目被删除或替换为最新条目.我希望我所有的参赛作品都在场.我使用的是Oracle 10 g PL/SQL.

plsql file oracle10g

0
推荐指数
1
解决办法
1127
查看次数

pl/sql脚本在运行简单过程时遇到问题

我有一个名为logger(message)的存储过程,其中message的类型为varchar2.

当我执行时

 exec logger('hello'); 
Run Code Online (Sandbox Code Playgroud)

它表示匿名块已完成,此过程的作用只是在另一个表中插入记录.

但是,当我用它作为脚本的一部分说:

  Begin

    select count(*) into countCol from USER_TAB_COLUMNS where TABLE_NAME = 'EVAPP_INTERFACE_APPENTITY' and COLUMN_NAME = 'ORIGPTI_NUM' and DATA_SCALE is null; 
  IF    (countCol <> 0) then   

 execute immediate 'alter table EVAPP_INTERFACE_APPENTITY add ORIGPTI_NUM_TMP NUMBER(14,2)' ; 

 execute immediate 'update EVAPP_INTERFACE_APPENTITY set ORIGPTI_NUM_TMP = ORIGPTI_NUM' ; 

 execute immediate 'alter table EVAPP_INTERFACE_APPENTITY drop column ORIGPTI_NUM' ; 

 execute immediate 'alter table EVAPP_INTERFACE_APPENTITY rename column ORIGPTI_NUM_TMP to ORIGPTI_NUM' ; 


 DBMS_OUTPUT.put_line('This column EVAPP_INTERFACE_APPENTITY.ORIGPTI_NUM has been modified to the required precision'); 
   END IF; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures oracle-sqldeveloper

0
推荐指数
1
解决办法
410
查看次数