我在 PLSQL 中有一个 SELECT 查询,它包含多个 DATE 列,其中一些列还包含 TIME。日期和时间必须以标准格式显示,即;DD/MM/YYYY HH:MI:SS AM所以在执行查询之前我设置了 NLS_DATE_FORMAT 参数:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH:MI:SS AM';
这里的问题是那些只有日期(没有时间)的列也在结果集中显示默认时间,即;中午 12:00:00
oracle 有没有办法设置 NLS_DATE_FORMAT 参数,如果它不存在于 DATE 文件中,它会截断默认时间?
请注意,我知道 TO_CHAR 和 TRUNC 之类的方法可以实现所需的结果,但在我的情况下,我无法使用这些方法,因为它会影响我的应用程序中的数据排序。
if (:new.first_name is not null) then
:new.first_name := substr(regexp_replace(:new.first_name,'[^'||chr(1)||'-'||chr(127)||']',null),1,20);
end if;
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我使用此代码吗?我不明白!
我试图通过循环传递我想要调用的过程的名称,因为我需要连续调用 3 个类似的过程。
让我们打电话给他们:
它们每个都有 1 个输入变量和 2 个输出变量。
关于我可以改变什么来让它工作的任何想法?
FOR l_counter in 1..3
LOOP
SELECT PROC_NAME into V_PROC FROM PROC_LIST WHERE PROC_ID = l_counter;
EXECUTE IMMEDIATE 'PROC_DB.' || V_PROC || '(1,V_STEP_ERROR_CODE,V_STEP_MSG)';
COMMIT;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
第 5 行当前失败。(立即执行)带有:“无效的 SQL 语句”
我正在创建一个 Oracle 包,我想知道是否可以将 prcedure 设为私有,这是我的示例代码:
CREATE OR REPLACE PACKAGE MYSCHEMA.MyPackage AS
PROCEDURE MyProcedureA(outputParam OUT VARCHAR2);
PROCEDURE MyProcedureB(inputParam IN VARCHAR2);
END MyPackage;
/
CREATE OR REPLACE PACKAGE BODY MYSCHEMA.MyPackage AS
PROCEDURE MyProcedureA(outputParam OUT VARCHAR2) AS
myHello VARCHAR2(1000) := 'Hello';
BEGIN
MyProcedureB(myHello);
outputParam := 'OK';
END MyProcedureA;
PROCEDURE MyProcedureB(inputParam IN VARCHAR2) AS
myWorld VARCHAR2(1000) := 'World';
BEGIN
dbms_output.put_line(inputParam || myWorld);
END MyProcedureB;
END MyPackage;
Run Code Online (Sandbox Code Playgroud)
是否可以将 MyProcedureB 设为“私有”,我的意思是它只能由包 (MyProcedureA) 中的其他程序调用?
我正在尝试使用此 Plsql 将值返回到 Apex 页面项中。页面项源是 PL/SQL 函数体。
DECLARE
v_val VARCHAR2 (3000 CHAR);
CURSOR c_mylist
IS
select * from table_mylist
order by id;
BEGIN
FOR r_mylist IN c_mylist
LOOP
--dbms_output.put_line( c_mylist.item );
v_val := c_mylist.item ||' '||c_mylist.item;
END LOOP;
return v_val;
END;
Run Code Online (Sandbox Code Playgroud)
出乎意料的是,它只将游标的最后一个值返回到页面项中,而不是所有行值。在 SQL Developer 中尝试使用 dbms_output.put_line 显示正确的结果。我的脚本出了什么问题?
我有两个表,HISTORY_DATA 和 CURRENT_DATA,我有一个输入参数 REPORT_DATE,根据以下条件,我必须获取数据:
IF(REPORT_DATE<=TRUNC(SYSDATE-40))THEN
SCHD_TABLE:='HISTORY_DATA' ;
ELSE
SCHD_TABLE:='CURRENT_DATA';
END IF ;
Run Code Online (Sandbox Code Playgroud)
我尝试使用动态 SQL,但它给出了无效表名的错误。
SELECT * FROM ''||SCHD_TABLE||'' ;
Run Code Online (Sandbox Code Playgroud)
使用 CASE STATEMENT 但它也给出了语法错误:
SELECT * FROM (CASE WHEN REPORT_DATE<=TRUNC(SYSDATE-40) THEN HISTORY_DATA
ELSE CURRENT_DATA
END)
Run Code Online (Sandbox Code Playgroud)
请指导如何解决这个问题。
是否可以创建一个仅增量的物化视图?我希望已经插入的旧数据不被更新,只有新的插入应该包含在视图中
如果可能,我该怎么做?
是否有任何文档或任何我可以用作指南的地方?
SET SERVEROUTPUT ON;
DECLARE
var_test1 VARCHAR2(30) := 'RebellionRider';
BEGIN
DBMS_OUTPUT.PUT_LINE (var_test1);
END;
Run Code Online (Sandbox Code Playgroud)
每当我运行上面的代码时,我都会收到以下错误。我使用 oracle apex 来运行我的代码。如何解决?
错误:-
ORA-00922: 缺少或无效的选项
BEGIN
DBMS_OUTPUT.PUT_LINE (var_test1);
END;
Run Code Online (Sandbox Code Playgroud) 有没有办法将天数小时数月和分钟添加到时间戳中,我想将其值插入到变量中
我有想要添加到时间戳的分钟、小时、天和月的单独变量
时间戳格式是这样的“04-FEB-21 10.25.12.013000 AM”
我尝试使用 SELECT TO_TIMESTAMP(datecreated,'dd-mon-yyyy hh.mi.ss AM') + daysvar into duedate FROM dual; 但它返回错误 AM/AM 或 PM/PM required
daysvar 包含要添加到时间戳的天数
谢谢!
当我尝试运行此代码时
DECLARE
TYPE type_a IS
TABLE OF NUMBER INDEX BY PLS_INTEGER;
output NUMBER := 1;
FUNCTION fun_2 RETURN type_a IS
dum type_a;
BEGIN
SELECT
employee_id
BULK COLLECT
INTO dum
FROM
employees;
RETURN dum;
END fun_2;
PROCEDURE proc_1 AS
BEGIN
NULL;
END;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误报告 - ORA-06550:第 22 行,第 8 列:PLS-00103:在预期以下情况之一时遇到符号“文件结束”:
begin function pragma procedure 06550. 00000 - "line %s, column %s:\n%s" *原因:通常是 PL/SQL 编译错误。*行动:
但是当我最后添加 BEGIN END 时它工作正常
DECLARE
TYPE type_a IS
TABLE OF NUMBER INDEX BY PLS_INTEGER;
output NUMBER := …Run Code Online (Sandbox Code Playgroud) oracle ×10
plsql ×10
sql ×6
oracle-apex ×2
dynamic-sql ×1
oracle11g ×1
oracle19c ×1
return-value ×1
view ×1