我是SQL的新手,我想知道您是否可以动态打印cursor%rowtype的内容?
例如:
cursor cur is select * from ...;
current_row cur%rowtype;
begin
open cur;
loop
fetch cur into current_row;
-- dbms_output.put_line( current_row ); Would that be possible ?
exit when cur%notfound;
end loop;
或者我必须自己做无聊的部分,即指定我需要打印
我目前正在使用以下内容遍历PL/SQL中的值: for c in (select * from example_table where name is not null) loop
-- logic
end loop; 我想用动态SQL语句替换SQL语句,例如: l_sql := 'select * from example_table where || l_col || is not null';
for c in (l_sql) loop
-- logic
end loop; 这个是可能的吗? 诚挚的问候
当我在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 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'
如何在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中使用FOR-IN循环中的变量吗?这是必需的,因为FOR-IN内部的查询本质上需要是动态的。
SET SERVEROUT ON;
DECLARE
STMNT varchar2(4000);
SELECT_SQL varchar2(4000);
BEGIN
SELECT_SQL := q'[select table_name from all_tables where owner='EMP' and table_name like 'TEMP_%']';
FOR RE
我试图从一个在存储函数中打开的游标变量中获取数据,但是我总是得到“从序列中取出”错误消息。
以下是存储的函数:
CREATE OR REPLACE FUNCTION test_function RETURN SYS_REFCURSOR AS
p_recordset SYS_REFCURSOR;
BEGIN
OPEN p_recordset FOR SELECT '1' FROM DUAL UNION SELECT '2' FROM DUAL;
RETURN p_recordset;
END TEST_FUNCTION;
而Pro*C代码:
int m
我用PL/SQL编写了许多动态SQL:
-- Let's assume the query is much more complex and bind variables are not a solution here
EXECUTE IMMEDIATE 'INSERT INTO foo (col) VALUES (''somevalue'')';
观察撇号的转义复制,以形成有效的SQL / PL/SQL语法。是否有任何方法可以引用SQL字符串文字,使我不再需要转义?这将很好地将SQL字符串从实际执行复制到PL/SQL程序中,而无需繁琐地
我不知道有多少是正确的
DECLARE
CURSOR cur_depts IS
SELECT *
FROM dept;
BEGIN
FOR i IN cur_depts
LOOP
INSERT INTO dept_backup
VALUES(i);
END LOOP;
CLOSE cur_depts;
END;
这就是我遇到的错误
Error report -
ORA-06550: line 8, column 20:
PL/SQL: ORA-00947: not enough values
ORA-
我有emp表,因为没有记录。我在SQL和PL/SQL块中使用了这些表
SQL> BEGIN
2 FOR i IN (SELECT * FROM emp WHERE 1=2) -- emp table having no data
3 LOOP
4 dbms_output.put_line('Done');
5 END LOOP;
6 EXCEPTION
7 WHEN no_data_found THEN
8 dbms_output.put_line('No such value');
9
我将列表传递到我的存储过程中,这样用户就可以选择他们的产品线、制造商和类别来进行搜索。他们不需要提供这个标准,如果他们不提供,那么搜索将在所有这些产品线、制造商和/或类别中进行。我有两个策略,我正在试着决定哪一个更有效。
策略1是动态SQL,我尽量避免使用它,但在阅读Sommarskog文章后,我正在考虑使用它。举个例子。
IF @productLines IS NOT NULL
BEGIN
CREATE TABLE #TempProductLines (lineID uniqueidentifier)
INSERT INTO @TempProductLines
我是PL/SQL的新手,并且还在尝试使用游标。我想要验证一个插入过程,所以我写了另一个过程来这样做。
CREATE OR REPLACE PROCEDURE verify_insert
IS
CURSOR map_cur IS
SELECT Page_ID_NBR, Page_Type, Page_Dcpn FROM SSC_Page_Map;
map_rec map_cur%ROWTYPE;
BEGIN
OPEN map_cur;
FOR map_rec in map_cur
LOOP
DBMS_OUTPUT.PU
我正在pl/sql中报告创建的问题。我有许多分隔的sql,我希望有一个pl/sql查询,它为我编写一个带有数据库值的文本报告。
如何将此sql查询转换为pl/sql:
select a1.name, count(*)
from sin.incident a2, sin.people a1
where a2.assignee = a1.id
and a2.created_date >= (TO_DATE('&date', 'YYYY-MM-DD'))
and a2.parent_problem is NULL
and a1.assigne
与非常类似,我希望从函数返回一个结果集,并使用这个结果集,就像使用一个普通的表一样,但是我想在一个过程中(使用>= 11版本)来完成这个任务。
我的基本意图是允许将动态查询的结果用作非常复杂的静态SQL语句的起点。
对于直接来自SQL*加号的调用,存在多个解决方案,但它们在过程中运行时似乎都失败了。例如,使用“”:
SQL> WITH q AS (SELECT * FROM TABLE(method4.query('select id, pid from
2 my_table where rownum < 100')))
3 SELECT * F
我正在使用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
下面是为1 sub_id运行的PL/SQL block语句:- declare
v_sub table_b%rowtype;
v_res varchar2(10);
begin
FOR i in (select distinct b.sid from table_a a, table_b b where a.sub_id = 11)
LOOP
select * into v_sub from table_b where sid = i.sid;
---- SP call (mention default name of stored procedure)
我想知道,如果在调用动态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
我读过以前关于这个问题的问题/答案,但似乎没有人回答我的问题。我的最终目标是将数据从R获取到SQL表中。
在尝试这样做的过程中,我首先在Microsoft 2012中创建了表[PL_DEV].[PL_A].[X],包含以下列:ST VARCHAR(10)、YEAR VARCHAR(10)、Intercept FLOAT、Y FLOAT、Z FLOAT、U FLOAT。主键被添加到ST,YEAR列中。
从那里,我建立了一个RODBC连接,我称之为conn。
设置之后,我创建了一个名为df的数据框架,第一行数据如下所示:
ST YEAR INTERCEPT Y
我创建了一个过程,使用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