任何人都有任何单元测试PL/SQL的经验或工具.我见过的最好看的工具似乎是Quests Code Tester,但我不确定与持续集成工具或命令行测试的集成有多好?
我正在做一个为大学创建录取系统的项目; 这些技术是Java和Oracle.
在其中一个表中,存储了预先生成的序列号.之后,根据这些序列号,将输入申请人的表格数据.我的要求是,当输入过程完成后,我将不得不生成一个明智的报告.如果在喂食预先生成的序列号期间,任何序列号都会丢失.
例如,在表格中,序列号是7001,7002,7004,7005,7006,7010.从上面的系列可以清楚地看出,从7001到7010,缺失的数字是7003,7007,7008和7009.
Oracle中是否有任何DBMS功能可以找出这些数字,或者如果任何存储过程可能满足我的目的,请建议一个算法.
我可以在Java中找到一些技术,但为了提高速度,我想在Oracle中找到解决方案.
是否可以删除Oracle中方案中的所有内容?我找到了这个脚本:
Begin
for c in (select table_name from user_tables) loop
execute immediate ('drop table '||c.table_name||' cascade constraints);
end loop;
End;
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有任何东西可以删除模式,索引,表格,约束中的所有内容......但不是模式(删除用户...).
谢谢.
我们刚刚将我们的sql server存储过程转换为oracle程序.Sql Server SP高度依赖于会话表(INSERT INTO #table1...)这些表在oracle中被转换为全局临时表.我们最终为我们的400 SP提供了500 GTT
现在我们发现,由于性能和其他问题,在Oracle中使用GTT是最后的选择.
有什么其他选择吗?收藏?游标?
我们对GTT的典型使用方式如下:
插入GTT
INSERT INTO some_gtt_1
(column_a,
column_b,
column_c)
(SELECT someA,
someB,
someC
FROM TABLE_A
WHERE condition_1 = 'YN756'
AND type_cd = 'P'
AND TO_NUMBER(TO_CHAR(m_date, 'MM')) = '12'
AND (lname LIKE (v_LnameUpper || '%') OR
lname LIKE (v_searchLnameLower || '%'))
AND (e_flag = 'Y' OR
it_flag = 'Y' OR
fit_flag = 'Y'));
Run Code Online (Sandbox Code Playgroud)
更新GTT
UPDATE some_gtt_1 a
SET column_a = (SELECT b.data_a FROM some_table_b b
WHERE a.column_b = b.data_b AND …Run Code Online (Sandbox Code Playgroud) 我有CSV字符串100.01,200.02,300.03,我需要传递给Oracle中的PL/SQL存储过程.在proc中,我需要在表格的Number列中插入这些值.
为此,我从这里得到了一个工作方法:
[2]按级别使用SQL连接.
现在,我有另一个要求.我需要传递2个CSV字符串[长度相等]作为PL/SQL存储过程的输入.我需要打破这个字符串并将两个CSV字符串中的每个值插入表格中的两个不同列.请你让我知道怎么去吗?
CSV输入示例:mystring varchar2(2000):='0.75,0.64,0.56,0.45';
myAmount varchar2(2000):='0.25,0.5,0.65,0.8';
myString值将进入A列,myAmount值进入表中的B列.
你能告诉我如何实现这个目标吗?
谢谢.
我试图创建多个触发器,只需将一个脚本上传到Oracle DB/APEX工作区,并运行一次.
这是一个简短的脚本,与我试图使用的脚本相比:
create or replace trigger "BI_TEC_ROLES"
before insert on "TEC_ROLES"
for each row
begin
if :NEW."ROLE_ID" is null then
select "TEC_ROLES_SEQ".nextval into :NEW."ROLE_ID" from dual;
end if;
end;
create or replace trigger "BI_TEC_STATUSES"
before insert on "TEC_STATUSES"
for each row
begin
if :NEW."STATUS_ID" is null then
select "TEC_STATUSES_SEQ".nextval into :NEW."STATUS_ID" from dual;
end if;
end;
create or replace trigger "BI_TEC_SUBS"
before insert on "TEC_SUBS"
for each row
begin
if :NEW."SUB_ID" is null then
select "TEC_SUBS_SEQ".nextval into :NEW."SUB_ID" from …Run Code Online (Sandbox Code Playgroud) 1).你好,我有以下Oracle PL/SQL代码可能会从你们看来生锈:
DECLARE
str1 varchar2(4000);
str2 varchar2(4000);
BEGIN
str1:='';
str2:='sdd';
IF(str1<>str2) THEN
dbms_output.put_line('The two strings is not equal');
END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
这很明显,两个字符串str1和str2不相等,但为什么'两个字符串不相等'没有打印出来?Oracle有另一种比较两个字符串的常用方法吗?
我正在使用Oracle sql开发人员编写一个oracle包,我得到了这个编译错误:
错误(7,1):PLS-00103:遇到符号"CREATE".
create or replace
PACKAGE TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN;
FUNCTION afterPopulate RETURN BOOLEAN;
END TestPackage;
CREATE OR REPLACE PACKAGE BODY TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN AS
BEGIN
DELETE FROM TEST_1;
INSERT INTO TEST_1
SELECT * FROM TEST WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
FUNCTION afterPopulate RETURN BOOLEAN AS
BEGIN
UPDATE TEST SET RESULT="completed" WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS RETURN FALSE;
END;
END;
END TestPackage;
Run Code Online (Sandbox Code Playgroud)
如果我/ …
有没有办法在oracle中执行"for each",如下所示:
begin
for VAR in {1,2,5}
loop
dbms_output.put_line('The value: '||VAR);
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
我知道你可以这样做:
begin
for VAR in 1..5
loop
if VAR in(1,3,5) then
dbms_output.put_line('The value: '||VAR);
end if;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法以更好的方式做到这一点?定义一组值并迭代它们?
谢谢.
我在Oracle数据库pAdCampaign.fGetAlgoGroupKey中有一个存储函数.如何查看此功能的代码.