标签: plsql

如何在 Oracle PL SQL 中减去日期

我正在使用 Oracle 18c。我试图确定经过的时间,但在 PL SQL 中减去两个日期变量时出现错误。下面的代码工作正常:

DECLARE
    l_zero_date     date;
    l_current_date  date;
    l_elapsed_time  date;
BEGIN
    Execute Immediate 'ALTER SESSION set nls_timestamp_format = "DD-MM-YYYY HH24:MI:SS"';
    l_zero_date := to_date('01-01-1900 00:00:00', 'DD-MM-YYYY HH24:MI:SS');
    dbms_output.put_line('The value of l_zero_date is: ' || l_zero_date);
    Select ls.duration Into l_current_date From LIT_STATS ls Where ls.prim_key = 1002;
    dbms_output.put_line('The value of l_curr_date is: ' || l_current_date);
--    dbms_output.put_line('The elapsed time is: ' || l_current_date - l_zero_date);

END;
Run Code Online (Sandbox Code Playgroud)

这会产生结果:

The value of l_zero_date is: 1900-01-01 00:00:00
The value of l_curr_date is: …
Run Code Online (Sandbox Code Playgroud)

plsql date

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

pl/sql 中的函数 Next_Day

功能不起作用。怎么了?我使用数据库18c xe。

sql oracle plsql date function

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

在 Oracle PL/SQL 中,如何检查 JSON 对象是否包含特定键的元素

我有一个程序,如下所示。它接受 JSON 对象作为输入。该对象类型中的元素之一是带有 key 的数组samplekey。在某些情况下,JSON 对象p_object不包含samplekey数组。在这些情况下,过程会遇到运行时异常。在 PL/SQL 中处理这种情况的最佳方法是什么?我是否应该首先检查samplekey对象中是否存在带有键的元素p_object?如果是,我该怎么做?有没有更好的方法来处理这种情况?

procedure(p_object in json_object_t)
as

lja json_array_t;

begin

lja   := p_object.get_array('samplekey');

end;
Run Code Online (Sandbox Code Playgroud)

oracle json plsql

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

Oracle 通过管道函数进行查询 - 数据包含 ASCII 扩展字符时出现奇怪错误

我的 Oracle 管道功能有问题,我非常想了解发生了什么。我的 Oracle 数据库是版本 19c,在 Red Hat 7.2 上运行并在AL32UTF8为字符集。

\n

让我解释一下这个场景。

\n

我有以下两种类型和一种管道函数的设置,以便使用并行进程生成文件,从而可以极大地加快大文件的生成速度。

\n

两种类型

\n
--\n-- DUMP_PARALLEL_OBJECT  (Type) \n--\nCREATE OR REPLACE TYPE CPL_DATA_OUT.dump_parallel_object AS OBJECT\n(file_name VARCHAR2 (128), no_records NUMBER, seq_id NUMBER);\n/\n\n--\n-- DUMP_PARALLEL_OBJECT_NTT  (Type) \n--\nCREATE OR REPLACE TYPE CPL_DATA_OUT.dump_parallel_object_ntt AS TABLE OF cpl_data_out.dump_parallel_object;\n/\n
Run Code Online (Sandbox Code Playgroud)\n

流水线功能

\n

这是管道函数,用于获取我可以加入的块中的输出文件,然后使用cat在 Linux 中使用。

\n
CREATE OR REPLACE function CPL_DATA_OUT.fn_generate_parallel_file\n(\np_source    IN SYS_REFCURSOR,\np_filename  IN VARCHAR2,\np_directory IN VARCHAR2,\np_extension IN VARCHAR2 DEFAULT 'csv',\np_limit     IN NUMBER DEFAULT 10000\n) return dump_parallel_object_ntt\npipelined\nparallel_enable (partition p_source by any)\nas\n …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql pipelined-function oracle19c

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

Oracle PL/SQL 中的日期格式

如何检查oracle表中特定列的日期格式?oracle DATE 数据类型是否能够存储两种格式(美国和欧洲)?如果是的话,有没有办法区分哪个是月份,哪个是日期?

sql oracle plsql date

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

有没有办法获取启动用户/架构的 sys_context('USERENV', 'CURRENT_USER')

如果我从 admin1 访问表 emp,则使用下面的函数,理想情况下它应该返回 0,这表示连接用户为“ADMIN”,但它返回 1(最终用户的连接使用 ADMINT_TEST1.emp)

即使选择audit_test1.emp(函数 check_user 在两种模式中都可用),我也希望获得 ADMIN1 用户的连接标识,例如:来自 admin1 用户

create or replace function check_user
return number
is
  n number;
begin
  SELECT sys_context('USERENV', 'CURRENT_USER') into usrname FROM dual;
  if (usrname ='AUDIT_TEST') then
    dbms_output.put_line('show user'||usrname);
    return 1;
  else 
    return 0;
  end if;
end ;
Run Code Online (Sandbox Code Playgroud)

测试功能(从用户运行:ADMIN1)

declare
  n number(1);
begin
  select audit_test.check_user into n from dual;
  dbms_output.put_line(n);
  select check_user into n from dual;
  dbms_output.put_line(n);
end;
/


Output
===============
show user   AUDIT_TEST
1
show user   ADMIN1
0
Run Code Online (Sandbox Code Playgroud)

这是预期的功能吗?即使发起用户是 ADMIN1,当我们发出 …

sql database oracle plsql oracle12c

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

如何防止Oracle针对函数结果的每个属性调用函数

我创建了一个包,其中包含一个返回对象的函数。
当通过 sql 检索对象详细信息时,该函数会被多次调用 - 每检索一个详细信息一次。
我相信应该可以只调用一次。

以下是演示该问题的示例:

CREATE OR REPLACE TYPE t_test AS OBJECT (
    v1              VARCHAR2(10),
    v2              VARCHAR2(10),
    v3              VARCHAR2(10),
    times_called    NUMBER
);
/

CREATE OR REPLACE PACKAGE test_pkg AS 
    times_called    NUMBER :=0;
    FUNCTION test(something IN VARCHAR2) RETURN t_test;
    PROCEDURE reset;

END test_pkg;
/

CREATE OR REPLACE PACKAGE BODY test_pkg IS
    PROCEDURE reset IS
    BEGIN
        times_called := 0;
    END;
    
    FUNCTION test(something IN VARCHAR2) RETURN t_test IS
        
    BEGIN
        times_called := times_called + 1;
        RETURN t_test('first', 'second', 'third', times_called);
    END; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

如何检查无效字符?甲骨文SQL

寻找方法从 Oracle SQL 中的 StudentID 中过滤掉特殊符号、字母等,并将这些记录显示为无效。

过滤掉字母 aZ 和其他字符的最佳方法是什么?(只留下数字)

SELECT replace(Translate(studentid,'a-Z<>!-\+=/&', '??'),'?','') as StudentID, 'Invalid Characters in Student ID' 
FROM students
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

带-1参数的光标

我一直在尝试使用带有参数的游标来查询员工,但是我想检索所有数据而不将值传递到参数中,有什么想法吗?

    DECLARE

   cursor emp_cursor(v_dept_id number) IS
    SELECT * FROM employees
    WHERE department_id = v_dept_id;
    
    
BEGIN 
    FOR emp_record IN emp_cursor(60) LOOP
        dbms_output.put_line(' id = ' || emp_record.employee_id);
    END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

REGEXP_LIKE 的任何替代方案,因为它会导致性能问题

我们有一个 sql 性能不佳。我已经修复了执行计划,但 REGEXP_LIKE 导致高缓冲区获取,并且还在运行时做出贡献。我可以在 sql 中使用的任何替代方案。问题是 AND REGEXP_LIKE (xx3la. assembly_type, '^I ..*')

/* Formatted on 1/6/2023 2:07:28 PM (QP5 v5.318) */
SELECT 1
  FROM apps.oe_order_lines_all  ola
       JOIN APPS.OE_order_headers_all oh
           ON oh.Header_Id = ola.header_id AND oh.org_id = ola.org_id
       JOIN inv.mtl_parameters org
           ON ola.ship_from_org_id = org.ORGANIZATION_ID
       INNER JOIN ont.oe_transaction_types_tl tt
           ON     tt.transaction_type_id = oh.order_type_id
              AND tt.language = 'US'
              AND LPAD (UPPER (tt.name), 4) NOT IN ('TRIA',
                                                    'WARR',
                                                    'REPA',
                                                    'DUMM',
                                                    'DEMO',
                                                    'GOOD',
                                                    'INTE',
                                                    'CRED',
                                                    'EVAL',
                                                    'INVO')      --- ('STAND')
       JOIN apps.mtl_system_items_b msib
           ON …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql query-optimization

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