我在Oracle数据库中有一个存储过程.
在这个存储过程中,我定义了一个游标.
我使用以下方法遍历结果集:
FOR item IN cursor_name LOOP
END LOOP;
Run Code Online (Sandbox Code Playgroud)
查询执行了多少次?有没有办法让我知道?这也是最好的方法,还是应该以不同的方式迭代?
谢谢.
我有一个在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,但这没有效果.除了再次通过数据库表以取出值之外,还有其他选择吗?
我的存储过程如下:
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) 在我的项目中,我使用oracle作为主数据库,我遇到了解析clob的问题.所以假设我们有一个有价值的clob
aaaaaa
cccccc
bbbbbb
Run Code Online (Sandbox Code Playgroud)
它存储在表格测试中......
我需要写plsql程序来获取这个clob并拆分它以便我将有三个项目的数组[aaaaaa,cccccccc,bbbbbbb].
有没有可能的解决方案?
我的应用程序的当前锁定概念假定获得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 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) 我想知道在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) 我想使用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错误.
任何使用正则表达式的解决方案都将非常感激.
我有一个包装程序(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会在下次执行之前尝试编译一个过程.所以,无论如何,残疾人变得有效.但是,在当天执行结束时,他们都处于无效状态,如果可以避免,我会受到权力的质疑!
所以,只是想知道我是否可以避免分离调用并仍然将其保留为主过程的最后一步.
任何想法/指针都非常感激.
我在程序PLSQL中需要这样的东西
arrayCount:=parArray.Count;
For i In 1 .. arrayCount Loop
lsPar(i):=parArray(i);
End Loop;
Run Code Online (Sandbox Code Playgroud)
可能吗?求求建议!:)
plsql ×10
oracle ×9
sql ×2
cursor ×1
function ×1
locking ×1
oracle-apex ×1
oracle11g ×1
oracleforms ×1
regex ×1
triggers ×1
varray ×1
xml-parsing ×1