我想使用 Oracle 异常来处理以下代码中可能发生的错误。如果用户提供了数据库中不存在的图书 ID 和/或员工 ID,则会引发 NO_DATA_FOUND 异常。因此,我怎么知道哪个语句引发了这个异常。
CREATE OR REPLACE PROCEDURE TEST_EXCEPTION
(
book_id_in IN book.book_id%TYPE,
emp_id_in IN emp.emp_id%TYPE
)
IS
v_book_desc book.description%TYPE;
v_emp_name emp.emp_name%TYPE;
BEGIN
SELECT description into v_book_desc FROM book WHERE book_id = book_id_in;
...
SELECT emp_name into v_emp_name FROM emp WHERE emp_id = emp_id_in;
...
EXCEPTION
WHEN NO_DATA_FOUND THEN
/* Do something */
END TEST_EXCEPTION;
Run Code Online (Sandbox Code Playgroud)
我感谢任何建议或指导。谢谢你。
我有一个T-SQL脚本,它将字段转换为 IDENTITY(以一种奇怪的方式)。
如何将其转换为PL/SQL?(并且,可能,弄清楚,是否有更简单的方法来做到这一点 - 无需创建临时表)。
T-SQL 脚本:
-- alter table ts_changes add TS_THREADID VARCHAR(100) NULL;
-- Change Field TS_ID TS_NOTIFICATIONEVENTS to IDENTITY
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TS_NOTIFICATIONEVENTS
(
TS_ID int NOT NULL IDENTITY (1, 1),
TS_TABLEID int NOT NULL,
TS_CASEID int NULL,
TS_WORKFLOWID int NULL,
TS_NOTIFICATIONID int NULL,
TS_PRIORITY int NULL,
TS_STARTDATE int NULL,
TS_TIME int NULL,
TS_WAITSTATUS int NULL,
TS_RECIPIENTID int NULL,
TS_LASTCHANGEDATE int NULL,
TS_ELAPSEDCYCLES int NULL
) ON [PRIMARY]
SET IDENTITY_INSERT dbo.Tmp_TS_NOTIFICATIONEVENTS …Run Code Online (Sandbox Code Playgroud) 对不起,我的英语不好。我希望你能得到我想要的。
我有很多 *.sql 文件,我想编写一个程序来编译它们并通知我是否有任何问题(问题或错误)。
我的一个朋友为 java 编写了一个 IDE,因为我记得他使用 javac 来生成错误代码。另一方面,我已经看到 IDE 的 Visual Studio 或 Netbean 会自动告诉您是否有错误。所以现在我想知道有人知道如何使用 sql 文件做到这一点吗?
换句话说,我想为 SQL 文件(PL/SQL)编写一个编辑器来编译我的代码并告诉我我的错误是什么。
当我尝试在 SQL PLUS 中编译所有这些时,会出现这个问题,这太无聊了。
请帮我...
我有一个由一列组成的表格(BIRTH_DATE)。我如何使用 sysdate 从我BIRTH_DATE和GROUP BY它们的所有行中减去?
更清楚:
这是我获取的内容,现在我想在下表中为所有行添加一个 AGE 列
ID Birth_Date
___ ___________
1 02-JAN-63
2 23-OCT-31
3 30-DEC-35
4 06-MAY-83
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我有一些代码需要帮助调试,但我觉得如果我能让其中一个运行,我就能得到其余的(哦,我多么希望)。
create or replace
trigger minimumwage
before insert or update on Employee
for each row
begin
if :new.Wage < 7.25
then raise_application_error('-20000,Pay is below Texas minimum wage!');
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我正在尝试在通过 sqlplus 在我学校服务器上运行的表上执行此操作。
我想将选择查询结果存储在 PLSQL 中的变量中。
SQL>var v_storedate VARCHAR2(19);
SQL>exec :v_storedate := 'select cdate from rprt where cdate between cdate AND TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002'';
Run Code Online (Sandbox Code Playgroud)
作为
SQL>select cdate from rprt where cdate between cdate AND TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002';
Run Code Online (Sandbox Code Playgroud)
返回 : 2013/04/27-10:06:26:794
但它抛出错误:
ERROR at line 1: ORA-06550: line 1, column 121: PLS-00103: Encountered
the symbol "YYYY" when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem …Run Code Online (Sandbox Code Playgroud) 我有一个简单的测试函数,我传入一个特定的ID(我从中选择的表的主键),并在其上计算一个简单的函数和参数。
框架代码和测试:
create or replace function test(id varchar2, area float) return float is
theRow forest%ROWTYPE;
begin
select * into theRow from forest where Forest_No = id;
return area / theRow.Area;
end;
begin
select test('1', 16000) from dual;
end;
Run Code Online (Sandbox Code Playgroud)
输出:
[2019-10-14 21:19:10] [65000][6550] ORA-06550: line 2, column 5:
[2019-10-14 21:19:10] PLS-00428: an INTO clause is expected in this SELECT statement
Run Code Online (Sandbox Code Playgroud)
据我所知,文档和示例使用相同的顺序和语法,对此我一无所知。我尝试过将in子句移到Postgresql的末尾,但这没有用。
我在这里错过了什么?
有时我调用PL / SQL函数来接收和处理它返回的值。其他时候,我只想为副作用调用相同的函数。
例如,考虑一个日志记录函数,该函数将其参数记录在表中,然后返回由相同参数创建的格式化字符串。有时我想使用返回值,例如将其显示给用户,而其他时候,我只是调用表记录功能,而忽略返回值。在后一种情况下,我想避免声明一个变量来保存返回的值并编写一条assigment语句。
这个问题触及主题,答案似乎是调用者必须使用函数返回的值,无论是通过赋值语句还是select into。
有没有一种方法可以在PL / SQL中调用函数并丢弃返回的值?
在Oracle SQL开发人员中ORA-00942: Table or View not exist,执行以下操作时,我与其他用户连接时出错:
CREATE USER marta IDENTIFIED BY 'marta';
GRANT SELECT, INSERT ON myTable TO marta;
Run Code Online (Sandbox Code Playgroud)
因此,执行:
CONNECT marta/marta;
INSERT INTO myTable VALUES ('1', 'foo', bar');
Run Code Online (Sandbox Code Playgroud)
得到了ORA-00942 ...
显然,如果我使用系统用户,则可以毫无问题地插入行。
我搜索了其他答案,但我无法解决此问题。