标签: plsql

在游标中定义的查询执行了多少次?

我在Oracle数据库中有一个存储过程.
在这个存储过程中,我定义了一个游标.

我使用以下方法遍历结果集:

FOR item IN cursor_name LOOP
END LOOP;
Run Code Online (Sandbox Code Playgroud)

查询执行了多少次?有没有办法让我知道?这也是最好的方法,还是应该以不同的方式迭代?

谢谢.

oracle plsql stored-procedures cursor

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

如何在Oracle Forms 6i中还原对记录的更改?

我有一个在Oracle Forms 6i中运行的表单,其中包含从数据库中的某个表填充的表格格式化的行.一列启用了[List_Of_Values]属性,允许用户在可能的值中进行选择.

如果用户有权执行此操作,则只能选择列表中的某些值,并且我已创建[WHEN-VALIDATE-ITEM]触发器以在更改值后检查权限.触发器引发form_trigger_failure以防止用户保存所做的更改.

问题是如果用户收到关于缺少选择值的权限的通知,则用户无法知道先前的(旧)值以再次选择它,除非表单被取消将导致他的其他(有效的)变化也会丢失.

这是我在触发器中编写的代码

DECLARE
NEW_LOCATION  VARCHAR2(100);
BEGIN
NEW_LOCATION := :BLK_MAT_STG_PLACES_PILE.STG_LOC_ID;

    IF NEW_LOCATION LIKE 'OH01%' THEN
        IF NOT :GLOBAL.USER_ID LIKE 'Admin%' THEN
            MESSAGEBOX('You are not authorized to select this value');

            /* What can I write to load the old value to this item? */ 
            RAISE FORM_TRIGGER_FAILURE;
        END IF;
    END IF;
END;
Run Code Online (Sandbox Code Playgroud)

我尝试过ROLLBACK但是没有将旧值恢复为表单.我也尝试过SYNCHRONIZE,但这没有效果.除了再次通过数据库表以取出值之外,还有其他选择吗?

oracle triggers plsql oracleforms

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

Where子句在Oracle中不起作用

我的存储过程如下:

CREATE OR REPLACE PROCEDURE     Proc_SearchRequests
(
RequestedBy LONG,
FromDate DATE DEFAULT NULL,
ToDate DATE DEFAULT NULL,
RequestedByDesignation VARCHAR2 DEFAULT NULL,
TypeId INT,
CurrentStatusId INT DEFAULT NULL, 
AmountFrom LONG DEFAULT NULL,
AmountTo LONG DEFAULT NULL,
cur_ExcelOutput OUT SYS_REFCURSOR
  )
AS   
BEGIN
OPEN cur_ExcelOutput FOR
SELECT cd.*,
emp.FIRSTNAME || ' ' || emp.LASTNAME   AS ADDEDBYNAME
FROM 
DETAILS cd
LEFT JOIN EMPLOYEES emp ON cd.ADDEDBY = emp.EMPLOYEEID
WHERE
cd.TYPEID=TypeId;   

END;
Run Code Online (Sandbox Code Playgroud)

我正在通过执行程序:

BEGIN
PROC_SEARCHREQUESTS (110, to_date ('2001-01-01', 'YYYY-MM-DD'), to_date ('9999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS'), …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

用pl\sql逐行读取clob

在我的项目中,我使用oracle作为主数据库,我遇到了解析clob的问题.所以假设我们有一个有价值的clob

   aaaaaa
   cccccc
   bbbbbb
Run Code Online (Sandbox Code Playgroud)

它存储在表格测试中......

我需要写plsql程序来获取这个clob并拆分它以便我将有三个项目的数组[aaaaaa,cccccccc,bbbbbbb].

有没有可能的解决方案?

oracle plsql plsqldeveloper

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

我可以同时使用Oracle PL/SQL保存两个锁吗?

我的应用程序的当前锁定概念假定获得2个锁并执行代码.但是当我尝试释放第一个锁柄时,我总是遇到错误.有没有办法做到这一点,或者我错误地使用dbms_lock一次获得2个锁?

最好的祝福!

DECLARE
  l_handle_1 VARCHAR2(128);
  l_handle_2 VARCHAR2(128);
  l_result NUMBER;
BEGIN

    -- >>> LOCK1
    dbms_lock.allocate_unique('lock_1', l_handle_1);
    l_result := dbms_lock.request(l_handle_1, dbms_lock.x_mode, 10, true);
    BEGIN

      -- >>> LOCK2
      dbms_lock.allocate_unique('lock_2', l_handle_2);
      l_result := dbms_lock.request(l_handle_2, dbms_lock.x_mode, 10, true);
      BEGIN

        /*
         * PLSQL-Code with both locks held
         */

        -- LOCK-2 release
        l_result := dbms_lock.release(l_handle_2);
        IF (l_result > 0) THEN
          dbms_output.put_line('Fail 2');
        END IF;

        -- LOCK-1 release
        l_result := dbms_lock.release(l_handle_1);
        IF (l_result > 0) THEN
          dbms_output.put_line('Fail 1');
        END IF;

      EXCEPTION
        WHEN OTHERS THEN
          l_result := dbms_lock.release(l_handle_2);
          IF …
Run Code Online (Sandbox Code Playgroud)

oracle plsql locking

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

使用pl/sql dom解析器解析XML的最简单方法

我不知道如何解释,但我会尽我所能.我正在使用Oracle Apex并在我的表中使用数据类型为Clob的名为"CLOBTABLE"的XML.我已经尝试过XMLTYPE作为数据类型,但它不接受顶点中的任何数据,所以我使用CLOB当前作为数据类型.现在我想使用xml形式的数据,即

<Row>
    <cellArray>
        <Cell>
            <columnId>1</columnId>
            <valueArray>
                <Value>
                    <value>IR000024575452</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>5</columnId>
            <valueArray>
                <Value>
                    <value>AZ12579856-001</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>2</columnId>
            <valueArray>
                <Value>
                    <value>IT06686</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>9</columnId>
            <valueArray>
                <Value>
                    <value>Hu Mics Metab K</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>8</columnId>
            <valueArray>
                <Value>
                    <value>2006-03-31</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>7</columnId>
            <valueArray>
                <Value>
                    <value>2006-07-27</value>
                </Value>
            </valueArray>
        </Cell>
    </cellArray>
</Row>
<Row>
    <cellArray>
        <Cell>
            <columnId>1</columnId>
            <valueArray>
                <Value>
                    <value>IR000024575452</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>5</columnId>
            <valueArray>
                <Value>
                    <value>AZ12579856-001</value>
                </Value>
            </valueArray>
        </Cell>
        <Cell>
            <columnId>2</columnId>
            <valueArray>
                <Value>
                    <value>IT06686</value> …
Run Code Online (Sandbox Code Playgroud)

oracle plsql xml-parsing oracle-apex

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

在PLSQL中使用嵌套函数的正确方法是什么?

我想知道在PLSQL中使用嵌套函数的正确方法.在下面的代码片段中,函数'to_number'工作正常,但我的两个嵌套函数不能以相同的方式使用.

Declare
  Tettt Number;
  Function lolazo(pigt Number, p_Fecha_Fact Date)
  Return Number Is
    resultado number;
  Begin
    Select Vp.Valor
    into resultado
    from valor_precio vp
    Where Vp.Id_Tipo_Cargo = 103
      And Vp.Id_Grupo_Precio = pigt
      and vp.f_inicio_precio =
        (select max(vp2.f_inicio_precio)
         From Valor_Precio Vp2
         Where Vp2.Id_Grupo_Precio = pigt
           And Vp2.F_Inicio_Precio < p_fecha_fact
           And Vp2.Id_Tipo_Cargo = 103 );
    Return Resultado;
  End Lolazo;
  Function Multi(Uno Number, Dos Number) Return Number Is
  Begin
    return uno*dos;
  End Multi;
Begin
  Select to_number('123')
  Into Tettt
  From Dual;

--  Doesn't work!
--  Select …
Run Code Online (Sandbox Code Playgroud)

oracle plsql function nested-function

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

当包含(和)时使用regexp_substr提取字符串的一部分

我想使用regexp在oracle中提取字符串的以下部分:

String: FN_SUM(ACCRUED_INTEREST)
Output expected: ACCRUED_INTEREST
Run Code Online (Sandbox Code Playgroud)

我试过了 :

select regexp_substr('FN_SUM(ACCRUED_INTEREST)','([^)]') from dual;
Run Code Online (Sandbox Code Playgroud)

这给了我ORA-12725错误.

任何使用正则表达式的解决方案都将非常感激.

regex oracle plsql

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

编译无效的oracle程序

我有一个包装程序(proc_main)调用其中的一些程序.

create or replace Procedure proc_main
as
begin

proc_child1;

proc_child2;

proc_child3;

proc_compile_invalids; -- This invokes "alter procedure <procedure_name> compile" statement for all the invalids.

end;
/
Run Code Online (Sandbox Code Playgroud)

proc_child过程应用一些处理逻辑,其中包含一些重命名表的步骤.

这使程序无效,这就是为什么我有proc_compile_invalids过程再次将它们设置为有效状态的原因.

我的问题是:当我执行proc_main过程时,它会使主程序和内部子程序无效.因此,当proc_compile_invalids作为最后一步被调用时,它会在尝试重新编译主调用过程时挂起.

显然,如果我删除最后一步并单独执行它不是问题.

我知道我可以通过注释编译过程并将其作为独立执行来将它们分成2个不同的调用.而且我也知道这是一个美化步骤,因为oracle会在下次执行之前尝试编译一个过程.所以,无论如何,残疾人变得有效.但是,在当天执行结束时,他们都处于无效状态,如果可以避免,我会受到权力的质疑!

所以,只是想知道我是否可以避免分离调用并仍然将其保留为主过程的最后一步.

任何想法/指针都非常感激.

oracle plsql oracle11g

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

PLSQL /如何在关联数组的迭代期间添加值

我在程序PLSQL中需要这样的东西

 arrayCount:=parArray.Count;
 For i In 1 .. arrayCount Loop
    lsPar(i):=parArray(i);
 End Loop;
Run Code Online (Sandbox Code Playgroud)

可能吗?求求建议!:)

sql plsql varray

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