我有一个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) 我有更新脚本更新某些列:
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
我想通过前端查询检索数据库常量,以在DropDownList中填充此常量字符串.
我试过以下查询
select pr_Package.constant_String from dual;
Run Code Online (Sandbox Code Playgroud)
欢迎提出建议.
我有以下自定义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) 我有一个存储过程,我认为是在无限循环中捕获,但在分开并单独运行各种循环之后,事实证明我的代码导致了
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) 我想在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)
但它不起作用.怎么了?
形成客户端我需要将SYSDATE参数传递给PL/SQL.在服务器中,它需要转换为日期,使用TO_DATE(in_timestamp,'DD-MON-YYYY HH24:MI:SS'); in_timestamp的数据类型应该是什么?
我试图使用这样的数字列表.
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%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) 我需要从我的所有函数,过程,包,视图和表中提取代码(脚本),这样当我转到生产时,我可以运行脚本来创建所有对象.
在开发时我没有对所有数据库对象进行脚本备份.
提取代码或脚本的最佳方法是什么?任何建议或帮助都非常值得赞赏.
谢谢