我想知道,如果在调用动态SQL的PL/SQL程序单元中没有适当的异常处理,是否有一种方法可以找到在运行时中断执行的动态SQL语句。
procedure will_crash is
begin
-- 1000 dynamic sql statements here ..
execute immediate 'updaXte dual set X = ''Z'' ' ;
-- ... and 1000 more dynamic sql statements here ..
commit;
end; --> NO p
当我在oracle表上运行普通sql查询时:
select name from table;
我得到了想要的结果。
然而,当我以pl/sql的形式运行它时,我总是得到错误的ORA-01422: exact fetch returns more than requested number of rows。
declare
l_name VARCHAR(200);
begin
select name into l_name from table;
end;
我知道这个错误告诉我我正在尝试在l_name中插入更多的行,但是如何使l_name动态化,因为搜索几乎总是返回一个以上的结果。
使用pl/s
我试图通过Oracle 11g中的PL/SQL调用外部程序。是共享库的C代码,是相应的PL/SQL包装器。
让我们假设我想执行Unix的ps -A命令。我得到的是:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as sys@orcl AS SYSDBA
SQL> set serveroutput on;
SQL> exec osutil.RunOsCmd('ps -A');
ERROR, bad command or no output ret
在Oracle PL/SQL中有没有办法使用动态比较运算符?我有一个while循环,看起来像这样... WHILE counter > workingDays
LOOP... 我简化了一点,但是如果今天是周末,我希望这个>实际上是>=。有没有办法在PL/SQL中使用动态比较运算符?这不管用,但是像这样的东西..。 operator := '>';
IF TO_CHAR( curDate, 'D') IN (1,7) THEN operator = '>=';
WHILE counter operator wor
如何在PL/SQL或SQL中的动态SQL语句中找到错误的位置?
在SQL*Plus中,我看到错误的位置,例如,无效的SQL语句:
SYS@orcl> SELECT
2 X
3 FROM
4 TABLEX
5 /
TABLEX
*
ERROR at line 4:
ORA-00942: table or view does not exist
SQL*Plus显示带有行号的错误,并用星号打印和标记该错误所在的行。
转换为动态SQL后,我可以获得错误代码(SQLCODE)和错误消息(SQLERRM):
SYS@o
以下PL/SQL块工作:
DECLARE
r TABLE1%ROWTYPE;
BEGIN
SELECT * INTO r FROM TABLE1 SAMPLE(1) WHERE ROWNUM = 1;
END;
但是,当我试图用SAMPLE子句中的变量替换文字时,Oracle返回一个语法错误:
DECLARE
s NUMBER;
r TABLE1%ROWTYPE;
BEGIN
s := 1;
SELECT * INTO r FROM TABLE1 SAMPLE(s) WHERE ROWNUM = 1;
END;
ORA-06550: line
我正在使用Oracle APEX,并尝试将动态sql查询存储在PL/SQL函数体中。下面是我对一个经典报告的当前SQL查询:
SELECT
RELEASE,
COUNT(*) as "Total Tests", --total
SUM(CASE WHEN TYPE = 'P1' THEN 1 ELSE 0 END) as "P1",
SUM(CASE WHEN TYPE = 'P2' THEN 1 ELSE 0 END) as "P2",
SUM(CASE WHEN TYP
我对PL/SQL相当陌生,并被指派维护一个使用PL/SQL作为前端生成的WEB页面的PL/SQL系统(PL/?)。由于应用程序的复杂性,我试图从Oracle Developer Tools for Visual Studio (11.2.0.3.15)或Oracle的SQL开发人员那里获得调试器。
我无法从开发环境中启动应用程序,所以我在试图调试的包中使用DBMS_DEBUG_JDWP.CONNECT_TCP('10.15.1.177‘、'4000')和DBMS_DEBUG_JDWP.DISCONNECT()过程。
在Visual中启动Oracle调试侦听器时,Tool
如何从Oracle sqlplus获取PL/SQL中EXECUTE的动态select结果
我正在编写一个简单的sqlplus脚本来收集给定表中所有NUMBER列的总和:
SET SERVEROUTPUT ON
DECLARE
CURSOR column_cur IS
SELECT column_name FROM ALL_TAB_COLS
WHERE owner = '&scheme_name' AND table_name = '&table_name'
我正在尝试编写一个通用的数据转换例程,该例程是表驱动的,但遇到了绑定数据的基本问题。我纠结于如何引用列中的数据来绑定或构造动态SQL语句。特别是,我使用rowtype作为数据存储。简化示例:
Create or replace Procedure UpdateByColumn(rec tbl%rowtype, colName varchar2) is
Sqlstmt varchar2(1000);
Begin
-- this won't work because can't refer to data by column name
Sqlstmt := 'u
我创建了一个过程,使用APEX中返回冒号分隔值的穿梭项动态创建视图。下面是创建它的代码。
create or replace procedure create_temporary_view (input_employees in varchar2) is
begin
execute immediate 'create or replace view temp_batch_id as with emps(shuttle_item) as
(select '''||input_employees||''' from dual)
select
我在一个表中有一些数据,看起来像这样。
ID KEY VAL
---- ----- -----
1 name Bob
1 age 30
1 gender male
2 name Susan
2 age 50
可以获得此查询的输出:
SELECT *
FROM my_table
WHERE id = 1;
..in一个XML格式,如下所示:
<DATA>
<NAME>Bob</NAME>
<AGE>30><
我能够在中运行PL/SQL过程吗?
PL/SQL过程
create or replace PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
这里是DB日志:
Connecting to the database Oracle_XXXX.
Hello World!
Process exited.
Disconnecting from the database Oracle_XXXX.
但是我无法调试PL/SQL过程并获得错误日志?
这里是错误DB日志:
Connectin
在Oracle中创建了一个触发器。
SQL> CREATE OR REPLACE TRIGGER student_after_insert
2 AFTER INSERT
3 ON student
4 FOR EACH ROW
5 BEGIN
6 @hello.pl
9 END student_after_insert;
10 /
hello.pl的内容如下:-
BEGIN
DBMS_OUTPUT.PUT_LINE('hello world');
END;
然后..。结果非常好,因为hello.pl的内容在插入记录时显示