标签: plsql

PL/SQL的单元测试

任何人都有任何单元测试PL/SQL的经验或工具.我见过的最好看的工具似乎是Quests Code Tester,但我不确定与持续集成工具或命令行测试的集成有多好?

oracle unit-testing plsql

23
推荐指数
1
解决办法
9578
查看次数

如何检查一系列数字中的任何缺失数字?

我正在做一个为大学创建录取系统的项目; 这些技术是Java和Oracle.

在其中一个表中,存储了预先生成的序列号.之后,根据这些序列号,将输入申请人的表格数据.我的要求是,当输入过程完成后,我将不得不生成一个明智的报告.如果在喂食预先生成的序列号期间,任何序列号都会丢失.

例如,在表格中,序列号是7001,7002,7004,7005,7006,7010.从上面的系列可以清楚地看出,从7001到7010,缺失的数字是7003,7007,7008和7009.

Oracle中是否有任何DBMS功能可以找出这些数字,或者如果任何存储过程可能满足我的目的,请建议一个算法.

我可以在Java中找到一些技术,但为了提高速度,我想在Oracle中找到解决方案.

sql oracle plsql gaps-and-islands

23
推荐指数
2
解决办法
7万
查看次数

删除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 oracle plsql

23
推荐指数
2
解决办法
6万
查看次数

在oracle中避免全局临时表的方法

我们刚刚将我们的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)

oracle plsql temp-tables

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

在PL/SQL存储过程中拆分逗号分隔的字符串

我有CSV字符串100.01,200.02,300.03,我需要传递给Oracle中的PL/SQL存储过程.在proc中,我需要在表格的Number列中插入这些值.

为此,我从这里得到了一个工作方法:

如何在oracle 9i中最好地分割csv字符串

[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 plsql tokenize

22
推荐指数
3
解决办法
10万
查看次数

有没有办法在一个脚本中创建多个触发器?

我试图创建多个触发器,只需将一个脚本上传到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)

database oracle triggers plsql

22
推荐指数
2
解决办法
2万
查看次数

Oracle PL/SQL字符串比较问题

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有另一种比较两个字符串的常用方法吗?

sql oracle plsql oracle10g oracle11g

22
推荐指数
2
解决办法
10万
查看次数

创建oracle包遇到PLS-00103:遇到符号"CREATE"

我正在使用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 plsql pls-00103

22
推荐指数
3
解决办法
6万
查看次数

循环预定义的值

有没有办法在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 plsql stored-procedures for-loop

22
推荐指数
2
解决办法
4万
查看次数

如何在Oracle中查看PL/SQL存储函数体

我在Oracle数据库pAdCampaign.fGetAlgoGroupKey中有一个存储函数.如何查看此功能的代码.

oracle plsql

22
推荐指数
2
解决办法
13万
查看次数