以下查询给出了缺少的关键字错误..
select *
from its_account aac
CROSS APPLY its.fnGetAccountIdentifier(aac.account_key) ;
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
create or replace FUNCTION fnGetAccountIdentifier
(
v_AccountKey IN NUMBER
)
RETURN fnGetAccountIdentifier_pkg.tt_fnGetAccountIdentifier_type PIPELINED
AS
v_temp SYS_REFCURSOR;
v_temp_1 TT_FNGETACCOUNTIDENTIFIER%ROWTYPE;
BEGIN
OPEN v_temp FOR
SELECT *
FROM tt_fnGetAccountIdentifier;
LOOP
FETCH v_temp INTO v_temp_1;
EXIT WHEN v_temp%NOTFOUND;
PIPE ROW ( v_temp_1 );
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
我不知道我在哪里做错了.我真的很陌生.
我有一个大表,希望迭代记录(> 1,000,000),根据另外2组每个表> = 1执行一些检查,并将结果输出到文本文件.
执行此操作的PL\SQL需要几个小时,我可以对其进行优化,或者我可以将其重写为可并行化的clojure程序,因为只有选择而且没有写入(对表).
问题:1优化PL/SQL有哪些挑战/限制?
2在优化PL/SQL方面,将代码迁移到clojure是否有重大的优势?
编辑 这是它的肉
OPEN cur;
LOOP
FETCH cur INTO l_cur;
EXIT WHEN cur%NOTFOUND;
SELECT NVL (dUM ( (total - total_old)), 0),
NVL (dUM ( (new - old)), 0)
INTO li_debt, li_debt
FROM tbl1
WHERE accounting_date = l_cur.accounting_date
AND USER_ID = l_cur.USER_ID
AND USER_ACCOUNT = l_cur.USER_ACCOUNT;
SELECT NVL (
dUM (
DECODE (a.DEBITS,
'foo', ABS (amount),
ABS (amount) * -1)),
0)
amount
INTO li_dad_bill
FROM daily_trandactiond d, ACCOUNTS a
WHERE d.USER_ID = l_cur.USER_ID
AND d.USER_ACCOUNT …Run Code Online (Sandbox Code Playgroud) 在oracle pl/sql中,Ora-XXXXX和PLS-XXXXX异常之间的根本区别是什么.根据我的理解,ORA与数据库错误有关,PLS用于编程错误,有些人可以对这个主题有所了解.提前致谢 !
我必须有表,每个表至少有35M数据.我编写了一个批量更新脚本,如下所示我想知道我需要调整Limit=10000参数来运行此脚本以获得更好的性能.
DECLARE
CURSOR rec_cur IS
SELECT id,sirname
FROM table_user;
TYPE num_tab_t IS TABLE OF NUMBER;
TYPE vc2_tab_t IS TABLE OF VARCHAR2(15);
id_tab NUM_TAB_T;
sirname_tab VC2_TAB_T;
BEGIN
OPEN rec_cur;
LOOP
FETCH rec_cur BULK COLLECT INTO id_tab, sirname_tab LIMIT 10000;
EXIT WHEN id_tab.COUNT() = 0;
FORALL i IN id_tab.FIRST .. id_tab.LAST
UPDATE table_user_backup
SET sirname = sirname_tab(i)
, sirname_date = sysdate
WHERE id = id_tab(i);
END LOOP;
CLOSE rec_cur;
END;
Run Code Online (Sandbox Code Playgroud)
我已经测试了三种可能的批量更新方式,分享它们每个经过的时间.它表明SQL比pl-sql forall批量更新更好.更改限制参数范围1000-100000后,我看不出任何差异
-- Bulk update --for 2.5M entries
--Takes 4 …Run Code Online (Sandbox Code Playgroud) 如果我有一个原始字符串并将其转换为varchar2然后将其转换为raw,则所有原始信息仍然存在.但是,如果我将它转换为varchar2然后将任何内容连接到它(包括一个空字符串),我会丢失最后一个字符.这是我用来复制它的代码:
SET SERVEROUTPUT ON;
DECLARE
raw_string RAW(100);
v_string VARCHAR2(100);
raw_string2 RAW(100);
BEGIN
raw_string := 'C5C6C7';
v_string := utl_raw.cast_to_varchar2(raw_string);
dbms_output.put_line('Raw string: ' || utl_raw.cast_to_raw(v_string) );
v_string := v_string || '';
dbms_output.put_line('New raw string: ' || utl_raw.cast_to_raw(v_string) );
END;
/
Run Code Online (Sandbox Code Playgroud)
第11行和第13行之间的唯一区别是第6行是在v_string与空字符串连接之后运行的.但输出是这样的:
Raw string: C5C6C7
New raw string: C5C6
Run Code Online (Sandbox Code Playgroud)
如果我不连接任何内容,新的原始字符串将是相同的,但如果我向字符串添加任何内容,即使在它的前面,它将丢失最后一部分.它只发生在某些字符上.如果我以'61'(小写'a')结束原始,那么什么都不会丢失.
我正在使用Oracle SQl Developer v.3.2.20.09
这一直困扰我一段时间,我不确定我是否遗漏了什么或者这只是一个错误,但任何帮助都会非常感激.
有没有一种在Oracle PL/SQL中声明动态数组的简单方法?
我需要使用一个可以包含100,000个数字的数组,其他时候我只需要存储3个数字
*删除是DML(数据操作语言).删除命令删除现有表中的记录.*的语法Delete是
sql> Delete from .
Run Code Online (Sandbox Code Playgroud)
这将从TAble中删除所有记录
sql> Delete from
Where **
Run Code Online (Sandbox Code Playgroud)
这会删除一组特定的记录.
注意:删除不是Autocommit语句(事实上,DML都不是自动提交)
Drop和Truncate都是DDL(数据定义语言).
使用它的结构删除{删除或删除}表.这是自动声明.Drops一旦被解雇,就无法回滚.
句法:
sql>drop table
Run Code Online (Sandbox Code Playgroud)
Truncate是用于从表中删除所有记录的命令.但是表的结构保持不变.它也是一个自动提交声明.
句法;
sql>truncate table**
Run Code Online (Sandbox Code Playgroud)
我们可以回滚截断吗?
在数据库A中,我编写了一个名为的PL/SQL过程is_document_valid.从这个过程我想在数据库B中调用另一个PL/SQL过程.像这样的东西:
procedure is_document_valid( p_url varchar2( 200 ) )
-- call stored-procedure in another database
check_document( p_url );
end;
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
使用此代码返回管道分隔字符串中的第n个值...
regexp_substr(int_record.interfaceline, '[^|]+', 1, i)
Run Code Online (Sandbox Code Playgroud)
当所有值都存在时,它工作正常
Mike|Male|Yes|20000|Yes所以3rd价值是Yes(正确的)
但如果字符串是
Mike|Male||20000|Yes,第3个值是20000(不是我想要的)
如何判断表达式不跳过空值?
TIA
麦克风
我想知道有没有办法在PL/SQL中接收信息已经更新了多少行以及在我的PL/SQL脚本使用MERGE DML语句时插入了多少行.
让我们使用这里描述的Oracle合并示例: 示例 MERGE示例
此功能在我的函数中使用,但我还想记录信息已更新的行数和已插入的行数.