我有一个查询,它使用游标循环显示select语句的结果。
简而言之,select语句从我拥有的映射表中选择所有记录。其中一列是“SourceTableName”。
我使用这个字段来生成一些动态SQL。
我希望在我的存储过程中添加一个参数,如果我传入一个'SourceTableNameFilter‘,它将允许我只为我想要的'SourceTableName’创建动态SQL。
我被一些包装我的动态SQL的逻辑所困扰。
IF @SourceTableNameFilter(SP参数)=@SourceTableName(来自映射表) BEGIN
生成并执行一些基于SourceTableNa
在Oracle中,只有2种类型的游标,即隐式游标和显式游标。这很容易理解。但是,在Server中有4种游标AFAIK,即静态的、动态的、仅向前的和滚动的。我觉得很难理解。
我得到的代码仅用于前向、动态和静态游标,除了游标声明之外,一切都是相同的。所以,我的问题是,他们有何不同?
declare @id int
declare @ename varchar(20)
declare @cnt int
declare cur_emp cursor forward_only for select sid,ename from emp
open cur_emp
set @cnt=@@cursor_row
我希望在过程正文中动态创建游标,,我还必须使用for循环,而不是下面的代码。我执行了动态游标,但不能使用for循环。
PROCEDURE myprocedure
AS
LV_TEST_CUR SYS_REFCURSOR;
LV_QUERY VARCHAR2(200);
LV_DATE DATE;
BEGIN
LV_QUERY:='select sysdate as mydate from dual';
OPEN LV_TEST_CUR FOR LV_QUERY;
/*FOR CUR_VAR IN LV_TEST_CUR
LOOP
dbms_ou
我有一个过程,它的结构如下:
PROCEDURE broker(prm_qgent in varchar2, prm_cursor out sys_refcursor)
IS
mmy_query varchar(200);
BEGIN
OPEN prm_cursor FOR SELECT * FROM DUAL;
mmy_query :='SELECT *some dynamic query* where 1=1';
if prm_agent is not null then
mmy_query := mmy_query ||'AND age
我是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;
或者我必须自己做无聊的部分,即指定我需要打印
我想弄明白为什么OPEN CURSOR FOR会允许SELECT而不允许UPDATE/INSERT
例如:
create table users( name varchar2(100) );
declare
cur sys_refcursor;
begin
open cur for 'insert into users values (''Sean'')';
dbms_sql.return_result( cur );
end;
返回
OPEN的目标必须是查询
==编辑:更多信息
我试图创建一个处理内联SQL的proc,我希望它能
我有这样一种情况,我维护的站点调用plsql包/过程(Oracle11g)。该过程使用传入的参数构建一个动态sql字符串(将该字符串称为"v_select")。生成字符串后,将使用v_select动态sql字符串打开引用游标。下面是伪代码。
OPEN ref_cursor FOR v_select
USING variables set to input parameters ;
现在,该过程有一个异常块(当其他的时候)来捕获任何异常。在异常块中,任何错误都会写入数据库中的表中。如果在执行动态sql时发生错误,异常块似乎不会捕获错误(错误表中没有插入任何条目),但我可以在.n
我不熟悉这些oracle动态查询,我只是想构建一个动态查询,这样我就可以根据它来获取记录。
下面是我的PL/ SQL语句:
declare
sql_query varchar2(5000) := 'select FKOM_OFFICE_ID,FKBAM_BUDGET_ID ';
begin
for x in (select distinct PFS_SOURCE_ID,PFS_SOURCE_ENG from PBS_FC_SOURCE WHERE PFS_UPPER_SOURCE_ID!=0 ORDER BY PFS_SOURCE_ID ASC )
loop
sql_q
我想运行一个以字符串保存的查询,例如:str='select 753 as number'
我尝试了exec sql,但得到了以下错误:
EXEC立即执行str
此外,我还在postgresql函数中使用它。所以我有一个字符串中的动态查询。如何在可以作为游标返回的字符串中运行查询。就像这样:
prepare strg as 'select 7777 as number';
open fcur for execute strg;
能办到吗?
为了获得动态列,我一直试图创建创建动态查询的PL/SQL语句。由于我对这些Oracle /SQL语句不太了解,所以我对一些事情感到困惑。
是否必须有存储过程来创建动态查询?
下面的查询不会抛出任何错误,甚至不会导致任何结果。在下面的查询中,我要做的是根据FKBAB_SOURCE_ID ( PFS_SOURCE_ID.的外键)获取FKOD_AMOUNT的和
declare
sql_query varchar2(3000) := 'select FKOM_OFFICE_ID,FKBAM_BUDGET_ID ';
begin
for x in
我试图使用游标获取动态数据:
CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$
BEGIN
OPEN $1 FOR SELECT * FROM users;
RETURN NEXT $1;
END;
$$ LANGUAGE plpgsql;
当我试图获取数据时,我一直收到这样的错误:"a“不是已知的变量??
do $$ begin
SELECT * FROM myfunc('a', 'b');
FETCH ALL FROM a;
CO
我在一个复杂的标准化数据库上工作,并生成一个动态的产品产品。 当前查询运行得相对较快,但生成的是1K+行,我需要实现一个分页解决方案。 在查询中获取构建动态数据所需的所有信息相对复杂 FROM pulse_templates pt
INNER JOIN taggings ptags on ptags.taggable_type = 'PulseTemplate' AND ptags.taggable_id =
pt.id AND ptags.context = 'available_for'
INNER JOIN schools s on s.id = 1
我有一个在存储过程中创建的动态SQL语句。我需要使用游标遍历结果。我很难弄清楚正确的语法。这就是我要做的。
SELECT @SQLStatement = 'SELECT userId FROM users'
DECLARE @UserId
DECLARE users_cursor CURSOR FOR
EXECUTE @SQLStatment --Fails here. Doesn't like this
OPEN users_cursor
FETCH NEXT FROM users_cursor
INTO @UserId
WHILE @@FETCH_STATU
游标可以动态传递参数吗?
例如:
create or replace procedure getRec
as
cursor get(nameToGet varchar2) is select * from test where name = nameToGet;
rec test%rowtype;
begin
for rec in get('sam') loop
if get%notfound then
dbms_output.put_line('No record found');
else
dbms_output.put_line('Name : &
我知道在SQL中创建和使用游标既不安全也不高效,但有时这是唯一的选择。现在这是我唯一的选择。
我的问题不是如何避免使用游标,而是如果游标仅在存储过程中动态创建的临时表上操作,那么安全性和性能问题将如何。我知道游标的运行速度比set操作慢,并且对正在迭代的表设置一个锁。我的临时表是一个相对较小的表,只包含一个int和最多50个记录类型的字段。
DECLARE @pD int
DECLARE CurDB CURSOR FOR
SELECT pD FROM #mD
open CurDB
fetch next from CurDB into @pD
etc...
我发现在下面的SQL和动态SQL中使用了游标。Profile带来了相当多的执行计划,我认为它必须处理这个游标。这是一个糟糕的SQL选择吗?
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
我正在尝试构建页面压缩的动态查询,但是在执行时它显示了一个错误。
alter PROCEDURE usp_FindTableNameInAllDatabase
@dbName VARCHAR(256)
AS
DECLARE @tableName VARCHAR(256)
DECLARE @varSQL VARCHAR(512)
DECLARE @gettableName CURSOR
SET @gettableName = CURSOR FOR
SELECT tablename
FROM table_list
OPEN @gettableName
FETCH NEXT
FROM @getta
我正在使用绑定变量动态构建一个搜索查询,绑定变量至少有1个,最多有7个不同的潜在条件。我知道我能做到-
EXECUTE IMMEDIATE sql USING bind_var1, bind_var2 or
EXECUTE IMMEDIATE sql USING bind_var3, bind_var5, bind_var7.
是否可以在sql中包含绑定变量?
sql = 'SELECT * FROM table WHERE id = :bind_var1 AND name = :bind_var2 USING bind_var1, bind_var2'
并这样做
EXECU
我有一个场景,我需要用一些if/else语句创建一个动态查询,我已经准备好了查询,但无法使用这个内部循环下面是我试图获得的代码片段。
查询:
select user_name into username from table1 where user ='user1';
for(query)
Loop
Dbms_output.put_line('user name ' || user_name);
END Loop;
是否可以在for循环中使用vaiable?
我是新来的。为了找到问题的答案,我已经快把自己逼疯了。我创建了一些TSQL代码,用于在存储过程中的游标中执行一些动态SQL。游标从表x获取一些数据,基于在表x中检索到的数据构建查询,运行查询并返回数据。就像一种护身符。当我添加一个'insert into table‘来捕获结果时,我得到了一个错误:注意:只有SQL2000的错误才能在SQL2008上运行得很好。无法执行该操作,因为OLE DB提供程序'MSDAORA‘无法启动分布式事务。OLE DB错误跟踪OLE/DB提供程序'MSDAORA‘ITransactionJoin::JoinTransaction返回0x8
假设我在前端有一个用Java编写的搜索功能。我有一个文本框来表示example name。当我传递一个名字或一个字符时,它可以正常工作,但是当我传递任何特殊字符时,它就不能工作了,因为我将这个参数发送到使用动态查询的oracle过程。
假设我的过程中的查询如下:
create or replace procedure abc
(abc IN table.name%type
,p_abc abc_cur
)
is
v_var varchar2(2000);
begin
v_var:='select * from table where name LIKE '%'
我想做一些我认为相当简单的事情。生成在更新中更改的以逗号分隔的列列表。例如对于餐桌上的foo:
UPDATE foo SET bar = 8, zoo = "it's a zoo in here";
使用foo上的AFTER更新触发器,我应该能够在表列上循环,将OLD.col与NEW.col进行比较,以确定它是否已更改,并生成一个字符串"bar,zoo“。
如果硬编码列名是很容易的,但这对我来说不是一个选项。获取列名很容易,但是如何动态地从NEW和OLD获取值来比较它们呢?有什么办法可以做到吗?
我知道在MySQL (>=5.0.13)上的用户定义存储过程中使用动态SQL是可能的。所以如果我们有这样的东西:
CREATE PROCEDURE test()
BEGIN
SET @query = "SELECT * FROM temp";
PREPARE stmt FROM @query;
EXECUTE stmt;
END
我的问题是:如何使用执行的动态语句的结果?
我需要在Oracle上使用动态SQL执行,其中我不知道运行时之前SQL中使用的绑定变量的确切数量。
在对EXECUTE IMMEDIATE的调用中是否有方法使用绑定变量的变量数?
更具体地说,我需要将一个参数传递到未知的中,但我不知道在那里使用它的频率。
我试过
EXECUTE IMMEDIATE 'SELECT SYSDATE FROM DUAL WHERE :var = :var' USING 1;
但它又回到了ORA-01008: not all variables bound.
我需要执行动态查询。
我需要提取表的一些值。使用这些a值,我可以构造表名,在那里必须执行另一个查询,并使用if子句检查它提供的每个值。
我试着用游标来做,但似乎不让我在第二个游标中放一个变量。
做这个最好的方法是什么。你能帮帮我吗?
DECLARE
CURSOR c_outer IS SELECT ACTIVE FROM COMM;
CURSOR c_inner(p_name VARCHAR2) IS SELECT (sysdate-to_date(START_TIME,'YYYYMMDDHH24MISS'))*24 HOURS FROM p_name WHE