标签: plsql

有没有办法在oracle中进行选择性提交?

我有一个PL/SQL脚本,它运行一堆命令,并在最后调用commit.

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

 execute immediate 'alter table EVAPP_CARLETON_RESULT add AMTFIN_TMP NUMBER(10,2)' ; 

 execute immediate 'update EVAPP_CARLETON_RESULT set AMTFIN_TMP = AMTFIN' ; 

 execute immediate 'alter table EVAPP_CARLETON_RESULT drop column AMTFIN' ; 

 execute immediate 'alter table EVAPP_CARLETON_RESULT rename column AMTFIN_TMP to AMTFIN' ; 


 DBMS_OUTPUT.put_line('This column EVAPP_CARLETON_RESULT.AMTFIN has been modified to the required precision'); 
 END IF; 
 logger('68');

 evaluate.commitScript; 
Run Code Online (Sandbox Code Playgroud)

在此之前有68个这样的块,但在最后调用evaluate.commitScript.

但是,logger在每个这样的块之后被调用,并且它内部有一个commit语句.

 create or …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures

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

有条件地将记录添加到表中

我有更新脚本更新某些列:

update oppar
set oppar_run_mode = 0,
    oppar_run_time = 0, 
    oppar_interval_ind = 'N' , 
    oppar_destination = '',
    oppar_run_date ='', 
    oppar_run_interval=''
    where ( oppar_job_name, oppar_job_rec ) 
    in 
     ( ('CSCLM' , 'XYZ')
   , ('ARCLEVEXT' , 'LMN'));
Run Code Online (Sandbox Code Playgroud)

但也有地方有表中没有记录的情况下oppar其中列 oppar_job_rec是XYZ或LMN.

现在我需要核实存在的oppar_job_name=CSCLM ,然后如果存在.我需要检查是否存在与CSCLM相对应的Job rec,即oppar_job_rec=XYZ 如果它不存在,我需要添加一个包含这些细节的新记录.

oppar_job_name=CSCLM
oppar_job_rec=XYZ
oppar_run_mode = 0
oppar_run_time = 0 
oppar_interval_ind = 'N' 
oppar_destination = ''
oppar_run_date ='' 
oppar_run_interval=''
Run Code Online (Sandbox Code Playgroud)

如果它存在,那么我需要更新该行.

如果您需要更多信息,请帮助并告诉我.

但是我如何执行检查是否可以完成,我需要在大约100个具有不同值的oppar_job_rec记录上执行此操作.

Oracle 9i Enterprise Edition release 9.2.8.0 - 64 bit Production

sql oracle plsql

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

检索数据库常量

我想通过前端查询检索数据库常量,以在DropDownList中填充此常量字符串.

我试过以下查询

  select pr_Package.constant_String from dual;
Run Code Online (Sandbox Code Playgroud)

欢迎提出建议.

plsql oracle11g

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

为什么PLS-00382:表达式错误?

我有以下自定义RECORD TYPE:

TYPE TB48_RECTYPE IS RECORD ( 
                             codpo varchar2(5 BYTE),
                             codco varchar2(5 BYTE),
                             quadr varchar2(5 BYTE),
                             espec varchar2(5 BYTE),
                             aperf varchar2(5 BYTE),
                             subes varchar2(5 BYTE),
                             datin date);
Run Code Online (Sandbox Code Playgroud)

现在是一个返回完全相同类型的函数.

function retorna_infos_tabela_48(i_nip in varchar2) return TB48_RECTYPE is

retorno_REC TB48_RECTYPE;


begin
    select m.CODPO,
           m.CODCO,
           m.QUADR,
           m.ESPEC,
           m.APERF,
           m.SUBES,
           m.DATIN 
    into retorno_REC
    from TB48_M m
    where m.NRO = i_nip;

    return retorno_REC;

end retorna_infos_tabela_48; 
Run Code Online (Sandbox Code Playgroud)

但是,(这已经花了我超过4个小时),当我尝试像这样运行它:

    DECLARE 
    TYPE TB48_RECTYPE IS RECORD (
                             codpo varchar2(5 BYTE),
                             codco varchar2(5 BYTE),
                             quadr varchar2(5 BYTE),
                             espec varchar2(5 BYTE), …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle11g

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

处理游标的更好方法是不要让maxium游标打开超过错误

我有一个存储过程,我认为是在无限循环中捕获,但在分开并单独运行各种循环之后,事实证明我的代码导致了

ORA-01000:超出最大打开游标数

问题似乎与我填充前两个游标的方式有关.这似乎是一个愚蠢的问题,但我希望有人能就如何更好地处理这些游标的数量给我一些建议?

下面你将完整地找到我的程序,然后我将分解似乎导致问题的区域.

完整程序:

    procedure SplitIntrvlsAtShiftBoundaries is

vRecCount number;
RC number;
vShiftIDAtIntervalStart number;
vShiftIDAtIntervalEnd number;
vDummyRecSecs number(6,4) := 0.0;

vStartTimestamp timestamp with time zone;
vEndTimestamp timestamp with time zone;

cCurs Sys_refcursor;

vCurrentRec TMP_SHIFT_LIST_TBL%rowtype;
vCurrentInterval MACHINE_INTERVAL%rowtype;
vNewInterval MACHINE_INTERVAL%rowtype;

lProcName    CONST.PBString;


vIntervalDOW smallint; -- intervals never span a midnite boundary 
                       -- are split over midnite in prior steps.

CURSOR C1 IS SELECT * FROM TMP_SHIFT_MI_TBL ORDER BY START_DATE_TIME ASC, MACHINE_ID;
CURSOR C2 IS SELECT * FROM TMP_SHIFT_LIST_TBL ORDER BY SHIFT_START_DAY ASC, …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql cursor

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

如何在过程中执行提交的sql语句(作为参数)并测量执行时间?

我想在PL/SQL中编写一个函数,它有一个sql语句作为参数.该语句可以是DDL,DML和DCL

我想从控制台中执行的语句打印时间.

我有以下代码:

 create or replace procedure measureTime (statement  IN varchar2 )AS 
--declarations
neededTime INTEGER;
  BEGIN 
    dbms_output.enable; 
    EXECUTE IMMEDIATE statement
 COMMIT; 
SELECT ELAPSED_TIME AS neededTime FROM V_$SQL WHERE SQL_TEXT=statement
    dbms_output.put_line('executeTime '|| neededTime);
 END measureTime;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.怎么了?

oracle plsql oracle11g

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

Oracle SYSDATE输入数据类型

形成客户端我需要将SYSDATE参数传递给PL/SQL.在服务器中,它需要转换为日期,使用TO_DATE(in_timestamp,'DD-MON-YYYY HH24:MI:SS'); in_timestamp的数据类型应该是什么?

oracle plsql

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

如何在sql developer中将varchar转换为数字

我试图使用这样的数字列表.

SELECT *
FROM users
WHERE id in (list_of_ids)
Run Code Online (Sandbox Code Playgroud)

这是sql过程的一部分,变量'list_of_ids'是varchar,它包含这样的id:1,2,3,4,5 ........我如何使用这个列表和这个查询

sql plsql oracle-sqldeveloper

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

删除过程的Oracle PLSQL异常

我想创建一个简单的过程,当传递主键时将删除表中的记录.

我已经阅读了关于SQL%NOTFOUND的这个帖子.我认为该问题的解决方案是使用一个函数来检查传递的参数是否是该表的主键并返回一个布尔值.我确信这里有更多值得关注的事情.

我应该寻找哪些其他问题或具体例外?

这是我的程序的基本模板:

create or replace procedure delete_employee
  ( employee_id_i in employees.employee_id%type) is
begin
  if valid_employee(employee_id_i) then
    delete from employees where employee_id = employee_id_i;
  end if;
exception
  when others then
    log_error_proc(dbms_utility.format_error_stack(),
                   dbms_utility.format_error_backtrace());
end delete_employees;
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

提取数据库对象的代码或脚本

我需要从我的所有函数,过程,包,视图和表中提取代码(脚本),这样当我转到生产时,我可以运行脚本来创建所有对象.

在开发时我没有对所有数据库对象进行脚本备份.

提取代码或脚本的最佳方法是什么?任何建议或帮助都非常值得赞赏.

谢谢

database toad plsql oracle10g plsqldeveloper

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