标签: plsql

交叉申请提供缺少关键字错误

以下查询给出了缺少的关键字错误..

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)

我不知道我在哪里做错了.我真的很陌生.

oracle plsql cross-apply

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

优化PL/SQL或迁移到Clojure(可并行语言)?

我有一个大表,希望迭代记录(> 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)

plsql clojure query-optimization

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

Oracle Pl/Sql Ora和Pls异常

在oracle pl/sql中,Ora-XXXXX和PLS-XXXXX异常之间的根本区别是什么.根据我的理解,ORA与数据库错误有关,PLS用于编程错误,有些人可以对这个主题有所了解.提前致谢 !

oracle plsql exception oracle11g

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

在批量更新中调整PLSQL限制参数

我必须有表,每个表至少有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)

oracle performance plsql

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

在Oracle SQL Developer中与字符串连接时,String丢失最后一个字符

如果我有一个原始字符串并将其转换为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

这一直困扰我一段时间,我不确定我是否遗漏了什么或者这只是一个错误,但任何帮助都会非常感激.

sql oracle plsql character-encoding oracle-sqldeveloper

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

在Oracle PL/SQL中声明动态数组

有没有一种在Oracle PL/SQL中声明动态数组的简单方法?

我需要使用一个可以包含100,000个数字的数组,其他时候我只需要存储3个数字

arrays oracle plsql

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

DROP,TRUNCATE和DELETE之间的区别和最佳目的是什么?他们可以回滚吗?

*删除是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)

我们可以回滚截断吗?

sql database oracle plsql

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

从PL/SQL调用另一个Oracle数据库中的过程

在数据库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)

有谁知道如何做到这一点?

database oracle plsql stored-procedures

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

regexp_substr跳过空位

使用此代码返回管道分隔字符串中的第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

麦克风

regex oracle plsql

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

Oracle 11g:在PL/SQL中有没有办法在MERGE DML语句之后获取有关插入和更新行的信息?

我想知道有没有办法在PL/SQL中接收信息已经更新了多少行以及在我的PL/SQL脚本使用MERGE DML语句时插入了多少行.

让我们使用这里描述的Oracle合并示例: 示例 MERGE示例

此功能在我的函数中使用,但我还想记录信息已更新的行数和已插入的行数.

oracle merge plsql dml oracle11g

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