我正在使用 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) 我有一个程序,如下所示。它接受 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 管道功能有问题,我非常想了解发生了什么。我的 Oracle 数据库是版本 19c,在 Red Hat 7.2 上运行并在AL32UTF8为字符集。
让我解释一下这个场景。
\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/\nRun Code Online (Sandbox Code Playgroud)\n流水线功能
\n这是管道函数,用于获取我可以加入的块中的输出文件,然后使用cat在 Linux 中使用。
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) 如何检查oracle表中特定列的日期格式?oracle DATE 数据类型是否能够存储两种格式(美国和欧洲)?如果是的话,有没有办法区分哪个是月份,哪个是日期?
如果我从 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 检索对象详细信息时,该函数会被多次调用 - 每检索一个详细信息一次。
我相信应该可以只调用一次。
以下是演示该问题的示例:
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 SQL 中的 StudentID 中过滤掉特殊符号、字母等,并将这些记录显示为无效。
过滤掉字母 aZ 和其他字符的最佳方法是什么?(只留下数字)
SELECT replace(Translate(studentid,'a-Z<>!-\+=/&', '??'),'?','') as StudentID, 'Invalid Characters in Student ID'
FROM students
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用带有参数的游标来查询员工,但是我想检索所有数据而不将值传递到参数中,有什么想法吗?
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) 我们有一个 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)