我知道在MySQL (>=5.0.13)上的用户定义存储过程中使用动态SQL是可能的。所以如果我们有这样的东西:
CREATE PROCEDURE test()
BEGIN
SET @query = "SELECT * FROM temp";
PREPARE stmt FROM @query;
EXECUTE stmt;
END
我的问题是:如何使用执行的动态语句的结果?
如上所述,我需要使用pandas.read_sql_query使用所有相同的模式查询多个数据库。我尝试在所有dbs上创建循环并动态运行sql语句,结果如下所示:
USE db_test_1; SELECT * from test
到目前为止我就是这么做的:
cursor = conn.cursor()
cursor.execute("SHOW DATABASES LIKE '%test_%'")
cursor.close()
dbs = [v.replace("'", "") for (v, ) in cursor]
f
我有一个查询,它使用游标循环显示select语句的结果。
简而言之,select语句从我拥有的映射表中选择所有记录。其中一列是“SourceTableName”。
我使用这个字段来生成一些动态SQL。
我希望在我的存储过程中添加一个参数,如果我传入一个'SourceTableNameFilter‘,它将允许我只为我想要的'SourceTableName’创建动态SQL。
我被一些包装我的动态SQL的逻辑所困扰。
IF @SourceTableNameFilter(SP参数)=@SourceTableName(来自映射表) BEGIN
生成并执行一些基于SourceTableNa
我有一个python程序,它有一个带有单个元素的numpy数组,比如a='this is the element‘,我需要将这个值插入我的数据库(MySQL)。
我使用了execute(),但它显示了一个属性错误
我用于从表中选择数据的sql部件如下:
import pandas as pd
import mysql.connector
mysql_cn=mysql.connector.connect(user='root', password='',
host='127.0.0.1
因此,为了使用MySQL动态使用游标,可以在存储过程的循环中声明游标吗?我试着犯了个错误
increment: LOOP
DECLARE cur1 CURSOR FOR SELECT person_id, publication_id FROM p_publication WHERE person_id = new_count;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO pub_id, per_id;
IF NOT done THEN
我是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,我希望它能
为了获得动态列,我一直试图创建创建动态查询的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
我不熟悉这些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
我想使用另一个函数作为参数来调用一个函数,该函数尚未定义且可调用。有没有一种巨蟒式的方法来做到这一点? 我知道您可以将一个函数作为另一个函数的参数,就像下面的答案所建议的那样: Python function as a function argument? 但是,对于尚未定义和可调用的函数,这是不可能的。 我最近写了很多这样的重复代码,我非常确定一定有更多的pythonic方式来做这件事。 重复性代码: import pymysql
def database_connection():
return pymysql.connect(db="MyDatabase",
我有这样一种情况,我维护的站点调用plsql包/过程(Oracle11g)。该过程使用传入的参数构建一个动态sql字符串(将该字符串称为"v_select")。生成字符串后,将使用v_select动态sql字符串打开引用游标。下面是伪代码。
OPEN ref_cursor FOR v_select
USING variables set to input parameters ;
现在,该过程有一个异常块(当其他的时候)来捕获任何异常。在异常块中,任何错误都会写入数据库中的表中。如果在执行动态sql时发生错误,异常块似乎不会捕获错误(错误表中没有插入任何条目),但我可以在.n
我无法声明游标。游标在mysql中的意义是什么
declare c1 cursor for select name from record
错误1064 (42000):您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行使用“从记录中选择名称的c1游标”附近使用的正确语法。
我正在使用绑定变量动态构建一个搜索查询,绑定变量至少有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
我发现在下面的SQL和动态SQL中使用了游标。Profile带来了相当多的执行计划,我认为它必须处理这个游标。这是一个糟糕的SQL选择吗?
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
我有一个存储过程,它使用动态sql来构建报表的复杂查询。在打开光标之前,它曾经调用exec(@sql) .我认为这是一个错误,可以删除exec(@sql)命令,因为它是单独执行的,而不需要使用游标.
我说的对吗?这里有一个片段:
-- before this it's just doing string concatenation
SET @sql = N'DECLARE cc CURSOR STATIC FOR ' + @sql
exec(@Sql) --<-- is this needed here?
OPEN cc
打开游标不能有效地运行游标内的SQL吗?
我在以下OPENQUERY语句中遇到错误,该语句是我试图对来自SQL Server的MySql数据库执行的。
UPDATE OPENQUERY(MYWPDB, 'SELECT total FROM wp_tt WHERE id = 112121') SET total = 1
错误为“键列信息不足或不正确。更新影响了太多行”。
该语句应将“total”字段更新为值“1”。它是一个整型字段,'id‘是表中的主键。我使用的是SQL Server 2000。
每当我运行这段代码时,这个错误如下所示。。。!
Exception in thread "main" java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:
我有一个过程,它的结构如下:
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
我是新来的。为了找到问题的答案,我已经快把自己逼疯了。我创建了一些TSQL代码,用于在存储过程中的游标中执行一些动态SQL。游标从表x获取一些数据,基于在表x中检索到的数据构建查询,运行查询并返回数据。就像一种护身符。当我添加一个'insert into table‘来捕获结果时,我得到了一个错误:注意:只有SQL2000的错误才能在SQL2008上运行得很好。无法执行该操作,因为OLE DB提供程序'MSDAORA‘无法启动分布式事务。OLE DB错误跟踪OLE/DB提供程序'MSDAORA‘ITransactionJoin::JoinTransaction返回0x8
*DELIMITER //
create procedure test(OUT l_out INT)
begin
DECLARE done INT DEFAULT FALSE;
declare l_sno INT default 0;
declare a INT default 0;
declare b INT default 0;
declare cur_1 cursor for select sno,interest from temp t where x_coord between 55 and 60 for update of interest;
DECLARE CONTINUE H
我在我的应用程序中为mysql的execute()函数提供了一个缓慢的来源。我构建了一个简单的sql查询,它演示了这个问题:
SELECT * FROM `cid444_agg_big` c WHERE 1
。
>>> import MySQLdb as mdb
>>> import time;
>>>
>>> dbconn = mdb.connect('localhost','*****','*****','*****');
>>> c
我试图在MySQL db上执行以下多个插入:
p = 1
orglist = buildjson(buildorgs(p, p))
while (orglist is not None):
for org in orglist:
sid = org['sid']
try:
sql = "INSERT INTO `Orgs` (`sid`) VALUES (\"{0}\");".format(sid)
cursor.execute(sql)
我看的是,它的工作方式似乎与MySQL、Server (通过从任何过程逻辑运行简单的SELECT )或在Oracle中使用DBMS_SQL.RETURN_RESULT的方式类似。以下匿名块似乎是有效的:
BEGIN
DECLARE i INTEGER DEFAULT 1;
WHILE i < 10 DO
BEGIN
DECLARE cur CURSOR WITH RETURN TO CLIENT FOR SELECT i FROM sysibm.dual;
OPEN cur;
SET i = i + 1;
END;
END
动态SQL存储在SQL表中,必须在特定条件下执行。目前,我们使用游标为我们处理,但我总是被告知,避免游标时,如果可能,因为他们不是最有效的方式做事情。因此,我的问题是:如果没有它们,我如何执行动态SQL (如果有方法的话)?整个系统都是围绕这种动态SQL混乱构建的,因此不会改变它。
为此,只需假设表中有Id AS IDENTITY和SQL AS VARCHAR字段,其中SQL字段包含要执行的SQL (很明显)。
编辑:--基本上,我想循环遍历表,并在SQL列中执行SQL。
因此,表中的一行基本上如下所示:
ID SQL
-- ----------------------
1 SE