当我尝试从我的应用程序调用一个过程时出现错误,提示ORA-01002: fetch out of sequence
使用的技术:
这里有趣的一点是,只有当我对服务类中的调用方法使用@Transactional (org.springframework.transaction.annotation.Transactional) 注释时才会发生错误。如果我删除@Transactional,则没有 ORA 错误。
我正在使用 @Transactional,因为我将几个 DAO 注入到服务中。请找到我粘贴在下面的代码。
@Transactional
public boolean saveavgFlyHrs(AverageFlyingHoursReport averageFlyingHoursReport) throws TransactionDataException {
String status = null;
boolean isOk = false;
if(averageFlyingHoursReportDAO.saveavgFlyHrs(averageFlyingHoursReport)) {
status = averageFlyingHoursReportDAO.updateCheckEff(averageFlyingHoursReport.getSubFleet());
logger.debug("OUT_STATUS:"+status);
if(ConstantStringUtil.SUCCESS.equalsIgnoreCase(status)) {
isOk = true;
} else {
isOk = false;
}
}
return isOk;
}
Run Code Online (Sandbox Code Playgroud)
任何人请帮助我。
I have the following code:
BEGIN
DBMS_SCHEDULER.DROP_JOB (
job_name => 'MYJOB');
END;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
I get the following error message:
Error report: ORA-06550: line 6, column 1: PLS-00103: Encountered the symbol "COMMIT" 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
What is the problem with the syntax I am using for committing?
我想知道用户是否拥有对象的权限。
我正在研究 SQL Developer。
当我手动查询表DBA_TAB_PRIVS 时,我得到了所有需要的信息。
但是,我需要在某些触发器和函数中使用这些信息。
因此,我正在编写 PL/SQL 函数,如果角色具有特权,则返回 1,否则返回 0。
CREATE OR REPLACE FUNCTION HAS_PRIVILEGE_ON_OBJECT(rolename IN VARCHAR2,
objectname IN VARCHAR2,
objectowner IN VARCHAR2,
privilegename IN VARCHAR2)
RETURN NUMBER
AS
output NUMBER;
BEGIN
SELECT count(*) INTO output
FROM dba_tab_privs
WHERE grantee = rolename
AND owner = objectowner
AND table_name = objectname
AND privilege = privilegename;
IF output > 0 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END has_privilege_on_object;
Run Code Online (Sandbox Code Playgroud)
该函数不编译并说:
ORA 942:表或视图不存在。
连接的用户可以访问视图 DBA_TAB_PRIVS,因为我可以查询它,但是在尝试使用函数自动化它时。它不起作用。
请问有什么想法吗?
我是 PL/SQL 的新手,我在命令提示符中运行了一个简单的 Hello world 命令。
DECLARE
message varchar2(20):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
Run Code Online (Sandbox Code Playgroud)
但是,尽管我收到消息 PL/SQL 程序成功完成消息,但 hello world 并没有显示在 CMD 中。请帮忙!
我正在处理 PL/SQL 代码,我需要在 where 子句中使用变量作为列名来执行选择查询。列名作为 varchar 存储在表中,我使用循环将这些列名传递给我的 select 语句。
请找到我正在尝试运行的示例代码段:
set serveroutput on;
declare
var varchar2(100);
counter number;
begin
var:='description';
select count(*)
into counter
from nodetable
where var like '%Ship%';
dbms_output.put_line(counter);
end;
Run Code Online (Sandbox Code Playgroud)
输出:
anonymous block completed
0
Run Code Online (Sandbox Code Playgroud)
但是结果应该是 86。Oracle 将最后一个条件作为两个字符串而不是 column=string 进行比较。
请让我知道这在 oracle 中是否可行,或者是否有解决方法。
问候 Ankit
我知道我可以在包规范中创建一个子类型,例如:
CREATE OR REPLACE PACKAGE XY
AS
SUBTYPE type_sdebug IS VARCHAR (200);
...
END;
/
Run Code Online (Sandbox Code Playgroud)
如果我想在另一个包中使用相同的子类型,那么我需要再次重新定义相同的类型。有没有办法创建或替换全局子类型,例如:
CREATE OR REPLACE TYPE STRING_ARRAY AS VARRAY(500) OF VARCHAR2(30);
/
Run Code Online (Sandbox Code Playgroud) 我是 PL/SQL 的新手,我想显示以下消息。当我在 SQL Developer 中编译它时,我只会得到
PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
SET SERVEROUTPUT ON;
DECLARE
mesaj VARCHAR2 (100) := 'PL/SQL';
BEGIN
DBMS_OUTPUT.PUT(mesaj);
END;
/
Run Code Online (Sandbox Code Playgroud) 我正在尝试从对象类型表的变量中删除一个项目:
CREATE OR REPLACE TYPE "T_ATTRIBUTEPAGE_ATTRIBUTELIST" IS TABLE OF o_ATTRIBUTEPAGE_ATTRIBUTELIST;
CREATE OR REPLACE TYPE "O_ATTRIBUTEPAGE_ATTRIBUTELIST" IS OBJECT (
WizAttrEditID NUMBER,
InternalIndex NUMBER,
DimensionObjectID NUMBER,
AttributeName VARCHAR2(50),
AttributeLabel VARCHAR2(50),
AttributeType NUMBER,
AttributeLength VARCHAR2(50),
MandatoryAttribute NUMBER,
ReadOnly NUMBER,
Name VARCHAR2(2000),
Num NUMBER,
IsModified NUMBER,
Colour NUMBER);
Run Code Online (Sandbox Code Playgroud)
我正在遍历对象列表,我检查了它ls_attr_list.COUNT是 16,当满足条件时我尝试删除一个项目,但我收到此错误:
ORA-01403: 未找到数据
这是在这一行提出的: ls_attr_list.Delete(i);
FOR i IN 1..ls_attr_list.COUNT LOOP
BEGIN
IF ls_attr_list(i).attributename = 'PROTECTION_ROLE' THEN
ls_attr_list.Delete(i);
END IF;
EXCEPTION WHEN OTHERS THEN
writelog(SQLERRM,'ERROR');
END;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
ls_attr_list 用输入参数初始化:
PROCEDURE AttribInit(geninfo IN OUT …Run Code Online (Sandbox Code Playgroud) 最初我试图创建一个异常来捕获一个不存在的表 (-00942)。根据 Alex 和 Raj 的反馈,我修改了代码以使用 EXECUTE IMMEDIATE。这有助于识别表,但是当我将表从“员工”更正为“员工”时,这是我数据库中存在的表,我本来希望代码运行时不会出错,就像我没有使用 EXECUTE IMMEDIATE 一样.
使用 EXECUTE IMMEDIATE 时,代码是否可以无异常地运行,而不是生成 catch all 异常?
EXECUTE IMMEDIATE 'SELECT last_name INTO v_name FROM Employees WHEREsalary = v_sal';
WHEN OTHERS THEN :g_message := '发生了其他一些错误。';
我希望代码能够无一例外地运行。
VARIABLE g_message VARCHAR2(250)
DEFINE p_sal = 12000
DECLARE
v_name employees.last_name%TYPE;
v_sal employees.salary%TYPE := &p_sal;
table_does_not_exist exception;
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);
BEGIN
EXECUTE IMMEDIATE
'SELECT last_name INTO v_name FROM employees WHERE salary = v_sal';
DBMS_OUTPUT.put_line(v_name);
EXCEPTION
WHEN table_does_not_exist then
:g_message := 'table dose not exist';
WHEN …Run Code Online (Sandbox Code Playgroud) plsql exception-handling dynamic-sql ora-00942 oracle-sqldeveloper
我在 Oracle 中有一个存储过程。我想在 Oracle 的 JOBS 中调用它。
DECLARE
P_DATE DATE;
BEGIN
P_DATE := TO_DATE ('19/10/2016', 'DD/MM/YYYY');
MITRA.PENJUALAN_ANTAR_CABANG.REPORTKONSOLRK ( P_DATE );
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
当我将 P_DATE 执行为“19/10/2016”时,结果是正确的。但是当我像下面这样更改时,结果不会显示。
DECLARE
P_DATE DATE;
BEGIN
P_DATE := TO_DATE (TRUNC (SYSDATE - 1), 'DD/MM/YYYY');
MITRA.PENJUALAN_ANTAR_CABANG.REPORTKONSOLRK (P_DATE);
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
我的查询错误是什么,而如果我运行select trunc(SYSDATE-1) from dual日期是正确的。
plsql ×10
oracle ×8
sql ×4
database ×1
date ×1
dbms-output ×1
dynamic-sql ×1
mybatis ×1
ora-00942 ×1
privileges ×1
spring ×1
spring-mvc ×1
subtype ×1