标签: plsql

使用 Oracle 异常

我想使用 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)

我感谢任何建议或指导。谢谢你。

oracle plsql

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

T-SQL 到 PL/SQL (IDENTITY)

我有一个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)

t-sql identity plsql

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

如何验证我的 PL/SQL 语法

对不起,我的英语不好。我希望你能得到我想要的。

我有很多 *.sql 文件,我想编写一个程序来编译它们并通知我是否有任何问题(问题或错误)。

我的一个朋友为 java 编写了一个 IDE,因为我记得他使用 javac 来生成错误代码。另一方面,我已经看到 IDE 的 Visual Studio 或 Netbean 会自动告诉您是否有错误。所以现在我想知道有人知道如何使用 sql 文件做到这一点吗?

换句话说,我想为 SQL 文件(PL/SQL)编写一个编辑器来编译我的代码并告诉我我的错误是什么。

当我尝试在 SQL PLUS 中编译所有这些时,会出现这个问题,这太无聊了。

请帮我...

compiler-construction plsql

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

PL/SQL:如何在知道名为 Birth_Date 的列的情况下计算 AGE?

我有一个由一列组成的表格(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)

提前致谢!

plsql

1
推荐指数
2
解决办法
6878
查看次数

使用 raise_application_error 的 PL SQL 触发器显示错误。

我有一些代码需要帮助调试,但我觉得如果我能让其中一个运行,我就能得到其余的(哦,我多么希望)。

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 在我学校服务器上运行的表上执行此操作。

sql plsql sqlplus

1
推荐指数
1
解决办法
2万
查看次数

PLSQL - 将选择查询结果存储在变量抛出错误中

我想将选择查询结果存储在 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)

sql oracle plsql database-administration

1
推荐指数
1
解决办法
2万
查看次数

Oracle PL / SQL SELECT INTO子句认为它需要另一个INTO

我有一个简单的测试函数,我传入一个特定的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的末尾,但这没有用。

我在这里错过了什么?

oracle plsql datagrip

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

忽略PL / SQL函数的返回值

有时我调用PL / SQL函数来接收和处理它返回的值。其他时候,我只想为副作用调用相同的函数。

例如,考虑一个日志记录函数,该函数将其参数记录在表中,然后返回由相同参数创建的格式化字符串。有时我想使用返回值,例如将其显示给用户,而其他时候,我只是调用表记录功能,而忽略返回值。在后一种情况下,我想避免声明一个变量来保存返回的值并编写一条assigment语句。

这个问题触及主题,答案似乎是调用者必须使用函数返回的值,无论是通过赋值语句还是select into。

有没有一种方法可以在PL / SQL中调用函数并丢弃返回的值?

oracle plsql

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

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

ORA-00942:与其他用户连接的表或视图不存在

在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 ...

显然,如果我使用系统用户,则可以毫无问题地插入行。

我搜索了其他答案,但我无法解决此问题。

oracle plsql oracle-sqldeveloper

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