标签: plsql

PL / SQL过程的同步。如何保证一次只执行一个程序?

某些PL / SQL过程需要花费大量时间进行评估(因为重新计算和更新了大量数据)。

我想将执行此过程的执行上下文数量限制为单个。

如果执行其他上下文,则什么也不做...

但是我不知道在PL / SQL代码中使用哪些原子操作。

注意:恐怕如果服务器在过程评估的中间暂停时,使用表行进行同步会导致DB中的状态不一致...

oracle plsql

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

我应该以哪种模式锁定我的桌子?

我有表EMPLOYEE(idEmp,Name,lastName,Adress),我希望以每次有人插入新员工的方式阻止此表,这个新ID必须连续到最后一个员工的ID ...

- >实际上,可能有几个人试图在同一时间插入新员工,这就是为什么我需要锁定表...这些是替代方案:

  1. 在行共享模式下锁定表EMPLOYEE.

  2. 锁定表EMPLOYEE在行独占模式下.

  3. 在共享模式下锁定表EMPLOYEE.

  4. 锁定表EMPLOYEE在共享行中独占.

  5. 锁定表EMPLOYEE处于独占模式.

我可以选择不止一个.

sql plsql locking

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

如何使用pl/sql从下面的数据中删除多个分号

我想从此查询数据中删除多个半冒号.我使用修剪,但它不完整.

;ghulam.nabi@yahoo.com.pk;NOCBSS@yahoo.com.pk;;;fo.n2@yahoo.com.pk;;mumtaz.akhta@yahoo.com.pk
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

使用for循环在PL/SQL块中插入记录会产生错误

我正在创建一个名为'integer_properties'的inetegers表,从1到1000,表列是:

integer,isPrime,isOdd,isEven,digitCount;
Run Code Online (Sandbox Code Playgroud)

我想使用for循环插入记录我尝试过但错误说:'缺少SELECT关键字'

BEGIN
   for k in 1..1000
   loop
      insert into integer_properties(integer,
                                     isPrime,
                                     isEven,
                                     isOdd,
                                     digitCount)
         values(k,null,null,null,null);
   end loop;
END;
Run Code Online (Sandbox Code Playgroud)

使用DDL命令输入1000个数字而不使用PL/SQL块是很繁琐的.我试图在整数列中输入循环变量值.有可能吗?

oracle plsql

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

函数不返回小数位

我有一个执行计算的Oracle函数,但没有返回结果的小数.

CREATE OR REPLACE Function MY_TESTE
   RETURN DECIMAL
   IS
BEGIN

  RETURN 1/3;

END;
Run Code Online (Sandbox Code Playgroud)

如果我执行了这个功能

SELECT MY_TESTE 
  FROM DUAL
Run Code Online (Sandbox Code Playgroud)

它返回值0和任何小数位.但它预计会返回0.3333任何想法?

plsql oracle11g

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

PL/SQL拆分字符串,获取最后一个值?

如果模式看起来如此,如何在PL/SQL中拆分字符串以获取最后一个值?:

'1; 2',在这种情况下,我想要的值是2.

注意:拆分器是字符';' 和值的长度不同,如'1; 2或123; 45678等...'

提前致谢!

oracle plsql

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

SQL - Oracle函数使用模式名称的变量

我正在编写一些oracle存储过程,其中我们有条件逻辑,它影响我们正在使用哪个模式,我不知道如何在sql中为存储过程执行此操作.如果我正在使用预处理语句,那么它很好,但在我只是执行查询以填充另一个变量的情况下,我不知道如何做到这一点.例如

PROCEDURE register (
    incustomer_ref  in  VARCHAR2,
    incustomer_type in  VARCHAR2,
    outreturn_code  out VARCHAR2
)
IS
    customer_schema varchar2(30);
         record_exists number(1);
BEGIN
    if incustomer_type='a' then
        customer_schema:='schemaA';
    elsif incustomer_type='b' then
        customer_schema:='schemaB';
    end if;


    --This type of command I cant get to work
    select count(*) into record_exists from **customer_schema**.customer_registration where customer_ref=incustomer_ref

    --but a  statement like this i know how to do
    if record_exists = 0 then
        execute immediate 'insert into '||customer_schema||'.customer_registration   
        values ('||incustomer_ref||','Y',sysdate)';
    end if;
Run Code Online (Sandbox Code Playgroud)

谁能照亮我在这里失踪的东西.
干杯

sql oracle plsql

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

在Oracle对象类型构造函数中设置默认值

我想在Oracle对象类型中设置默认值,但是它需要为此在构造函数中传递所有属性。

无论如何,有没有,所以我只能在需要默认值的构造函数中传递必需的属性。

请查看以下详细信息

    SQL> CREATE TYPE TYPE_SUB AS OBJECT(
      2 COL1 NUMBER,
      3个COL2 VARCHAR2(100)
      4)
      5非决赛
      6 /

    类型已创建。

    SQL>创建或替换类型TYPE_MAIN
      2 UNDER TYPE_SUB
      3(
      4个COL3 varchar2(10),
      5个COL4 VARCHAR2(10),
      6 CONSTRUCTOR FUNCTION TYPE_MAIN(COL1 NUMBER,COL2 VARCHAR2,COL3 varchar2,COL4 VARCHAR2)作为结果返回
      7非决赛
      8 /

    类型已创建。

    SQL>创建或替换类型主体TYPE_MAIN IS
      2构造函数函数_MAIN(COL1编号,COL2 VARCHAR2,COL3 varchar2,COL4 VARCHAR2)按结果返回自
      3开始
      4 SELF.COL1:= nvl(COL1,123);
      5 SELF.COL2:= nvl(COL2,'NA');
      6 SELF.COL3:= nvl(COL3,'NA');
      7 SELF.COL4:= nvl(COL4,NULL);
      8 RETURN;
      9结束;
     10 END;
     11 /

    输入创建的正文。

    SQL>创建表TAB_MAIN(
      2个PKEY NUMBER,
      3 COLTEST VARCHAR2(100),
      4个COLNEW TYPE_MAIN)
      5 /

    表已创建。

    SQL>插入TAB_MAIN(PKEY)值(1)
      2 …

oracle types plsql function object-type

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

在NUM子列的IN子句中使用逗号分隔值

我在包中有2个程序.我正在调用一个过程来获取逗号分隔的用户ID列表.

我将结果存储在VARCHAR变量中.现在当我使用这个以逗号分隔的列表放入其中的一个IN子句时抛出" ORA-01722:INVALID NUMBER"异常.

这就是我的变量的样子

l_userIds VARCHAR2(4000) := null;
Run Code Online (Sandbox Code Playgroud)

这是我分配值的地方

l_userIds := getUserIds(deptId);  -- this returns a comma separated list
Run Code Online (Sandbox Code Playgroud)

我的第二个问题是 -

select * from users_Table where user_id in (l_userIds);
Run Code Online (Sandbox Code Playgroud)

如果我运行此查询,我会收到INVALID NUMBER错误.

有人可以在这帮忙.

sql oracle plsql procedure

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

Oracle 9i中的REGEXP_REPLACE替换

我想在oracle 9i中使用Jason Bennet的PL/SQL ExcelDocumentType代码.(http://www.jasonsdevelopercorner.com/?page_id=8)

目前我无法编译它,因为它使用REGEXP_REPLACE的不是oracle 9i.

任何人都可以为以下内容建议Oracle 9i替换表达式....

(LENGTH(REGEXP_REPLACE(p_header_string,'[^'||p_delimiter||']','')))+1;
Run Code Online (Sandbox Code Playgroud)

谢谢

oracle plsql

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

标签 统计

plsql ×10

oracle ×8

sql ×4

function ×1

locking ×1

object-type ×1

oracle11g ×1

procedure ×1

types ×1