标签: database-cursor

如何使用perl和postgresql遍历大型结果集

DBD::PgPerl 的PostgreSQL绑定将始终获取查询的整个结果集.因此,如果您使用简单的prepare执行来遍历大型表,那么只需运行就可以将整个表放在内存中$sth->execute().准备好的陈述和电话fetch_row都没有帮助.

如果您正在使用BIG表,以下将失败.

use DBI;
my $dbh =   DBI->connect("dbi:Pg:dbname=big_db","user","password",{
        AutoCommit => 0,
        ReadOnly => 1,
        PrintError => 1,
        RaiseError =>  1,
});

my $sth = $dbh->prepare('SELECT * FROM big_table');
$sth->execute(); #prepare to run out of memory here
while (my $row = $sth->fetchrow_hashref('NAME_lc')){
  # do something with the $row hash
}
$dbh->disconnect();
Run Code Online (Sandbox Code Playgroud)

postgresql perl dbi large-data database-cursor

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

如何关闭在数据库链接(ORA-02080)中创建的游标?

我在Oracle SQL Developer中执行以下步骤(逐步使用F-9):

create database link mydb connect to my_schema identified by mypwd using 'connection1';

select * from users where id = 1;

rollback;
ALTER SESSION CLOSE DATABASE LINK mydb;
drop database link mydb;
Run Code Online (Sandbox Code Playgroud)

我尝试关闭数据库链接时收到错误:

SQL错误:ORA-02080:数据库链接正在使用02080. 00000 - "数据库链接正在使用中"

*原因:事务处于活动状态或者在alter session close database link命令中给出的数据库链接上打开了游标.

*动作:提交或回滚,并关闭所有游标

交易完成了,但是当我这样做时,select * from V$DBLINK;我看到还有一个打开的光标,但我不知道如何关闭那个.

sql oracle database-connection database-link database-cursor

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

如何在PL/SQL中的另一个游标内读取游标

我必须完成由离开公司的人完成的开发,我试图理解在另一个游标内部构建的游标..这样的事情:

CURSOR c_fund as select col_1, 
       col_2, 
       CURSOR(select col_10 * {some formula} clo_n, 
                     col_m 
               from table2 
              where col_8 is not null)
(...)
Run Code Online (Sandbox Code Playgroud)

我怎么才能阅读内部光标?当我执行主游标的查询时,我有这个结果:

COL_1        COL_2   CURSOR
-------      ------  -------
11619187    604441  (CURSOR)
11619187    604434  (CURSOR)
11619187    604439  (CURSOR)
Run Code Online (Sandbox Code Playgroud)

当我在CURSOR数据上双击(在TOAD上)时,会弹出一个显示数据的新窗口:

CLO_N   COL_M
-----   ---------------
009511  1g0-M-TPT_BNM
009511  1g0-Q--213_BNM
009511  C--F_R*P_C:R:CT
009511  1g0-M--16_BNM
009511  P*RF_DI-TR
009511  *CR
009511  BOWLING
009511  C--F_BNM
009511  C:PIT:L
009511  N:V
009511  INF--IGN
Run Code Online (Sandbox Code Playgroud)

oracle plsql database-cursor

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

MySQLConnector (Python):每个查询的新数据库连接与单个连接

我有这个问题:我正在编写一些Python脚本,而到目前为止,我在整个脚本中使用单个MySQLConnector连接没有任何问题(仅在脚本末尾关闭它),最近我有一些问题。

如果我在脚本开头创建一个连接,类似于(我知道,忽略安全问题):

db_conn = mysql.connector.connect(user='root', password='myPassword', host='127.0.0.1', database='my_db', autocommit=True)
Run Code Online (Sandbox Code Playgroud)

然后总是像这样使用它:

db_conn.cursor(buffered=True).execute(...)
Run Code Online (Sandbox Code Playgroud)

或 fetch 等方法,我会收到如下错误:

Failed executing the SQL query: MySQL Connection not available.
Run Code Online (Sandbox Code Playgroud)

或者

Failed executing the SQL query: No result set to fetch from.
Run Code Online (Sandbox Code Playgroud)

或者

OperationalError: (2013, 'Lost connection to MySQL server during query')
Run Code Online (Sandbox Code Playgroud)

代码是正确的,我只是不明白为什么会发生这种情况。也许是因为我在异步中多次同时运行同一个函数(尝试了 2 次),所以也许对游标的并发访问会导致这种情况?

我发现有人每次都使用不同的数据库连接来修复它(此处)。

我尝试为数据库的每个查询创建一个新连接,现在根本没有错误。它工作得很好,但似乎有点矫枉过正。想象一下调用异步函数 10 或 100 次...将会创建大量数据库连接。会引起问题吗?内存会耗尽吗?而且,我想它会放缓。

有没有办法通过为所有查询保持相同的连接来解决这个问题?为什么会发生这种情况?

python mysql mysql-python mysql-connector-python database-cursor

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

在 double with 语句中使用 psycopg2 执行多个 SQL 查询

是否可以使用 psycopg2 在双游标打开语句中传递多个查询with(首先打开连接,然后游标)?

例如替换:

import psycopg2

def connector():
    return psycopg2.connect(**DB_DICT_PARAMS)

########

sql_update1 = ("UPDATE table SET array = %s::varchar[], "
               "array_created = true, timestamp = now() AT TIME ZONE 'UTC' "
               "WHERE id = %s")

sql_update2 = ("UPDATE table SET json_field = %s "
               "WHERE id = %s")

with connector() as conn:
    with conn.cursor() as curs:
        curs.execute(sql_update1, [stringArray, ID])

with connector() as conn:
    with conn.cursor() as curs:
        curs.execute(sql_update2, [jsonString, ID])
Run Code Online (Sandbox Code Playgroud)

经过:

#(...)

sql_update1 = ("UPDATE table SET array …
Run Code Online (Sandbox Code Playgroud)

postgresql psycopg2 python-3.x database-cursor

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

如何在 SQL 查询中使用排序方式实现 GraphQL 游标

我有一个数据库表,reviews其中id 是自动递增的,而 rating 是 0 到 100 之间的整数。idrating

我正在尝试在 GraphQL API 中创建基于游标的分页,但正在努力为hasPreviousPage和创建必要的查询hasNextPage

这是我的数据:

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, RATING: 40
ID: 5, RATING: 60
Run Code Online (Sandbox Code Playgroud)

以下是 GQL 查询的示例:

reviews(first: 3)
Run Code Online (Sandbox Code Playgroud)

哪个返回

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
Run Code Online (Sandbox Code Playgroud)

带页面信息

hasPreviousPage: false
hasNextPage: true
Run Code Online (Sandbox Code Playgroud)

pageInfo 的查询将是

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-cursor graphql

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

pyodbc使用DB2从存储过程返回多个游标

我有一个python程序从db2数据库调用存储过程.我results = cursor.fetchall()用来处理我的存储过程的结果.但是,我的存储过程返回两个游标.results只包含第一个.我需要一种方法来遍历尽可能多的游标.我希望fetchmany()这是我的答案,但事实并非如此.

我真的需要能够做多个结果集,因为我写的程序只能调用一个存储过程.要回去让它能够打两个电话需要很多.除了其中一件事,我需要让10个光标返回.一切都是动态的,因此应用程序不知道它正在运行什么程序,它只是获取数据并将其吐入excel而不知道其含义.我需要一个光标用于数据,而另一个光标用于不同类型的计数和总计.

请帮忙.让我知道如果你需要更多的信息,我不认为精心设计的代码是必要的,因为我正在寻找一个内置的功能来做到这一点,或者甚至可能是一个不同的库,因为我已经完成了我的谷歌搜索,它看起来像pyodbc不会为DB2做这件事.DB2是一个要求:(

db2 stored-procedures pyodbc database-cursor

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

隐藏特定列的输出

我编写了一个包含存储过程和REF游标的包.我现在可以通过这个光标显示表格中的所有列.我希望能够插入一个循环,如果满足某个条件,七个列中的四个将显示四个星号,其余列将显示其正常数据.

例如,我有一个名为country的列.每当美国出现在记录中时,(empid,ss,address,dept)的四列将只需显示****,而其余列将显示为正常.如果非美国的国家/地区在记录中,则所有列都将正常显示数据.我知道有一个noprint函数,但我似乎无法弄清楚如何只显示星号.

sql security oracle database-cursor

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

Python 中避免使用光标

我是 python 和 mysql 的新手。我想了解如何连接到 mysql 数据库。到目前为止,我知道我可以使用 pymysql 并创建一个游标对象。但我真的不知道光标在哪里。所以我有三个问题。
游标到底是什么以及为什么要使用它?
我听说最好避免光标。为什么?
如何在没有游标的情况下使用mysql数据库?(我已经搜索并没有找到任何结果。我认为原因是我不知道我应该搜索什么)

mysql database-cursor

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

Sql游标的缺点

我正在研究光标,我在某处读到了.每次从光标中获取一行时,它都会导致网络往返,而正常的选择查询只会导致一次往返,但结果集大.

任何人都可以解释这意味着什么?通过一些例子,网络往返和一次往返意味着什么.在使用游标的时候和循环使用的时候?

sql oracle database-cursor

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

PL/SQL:如何启用模式中的所有触发器?

我正在尝试创建一个使用游标的过程,该游标可以启用我的架构中的所有触发器。但是,我在第 16 行收到此错误:PL/SQL: SQL 语句被忽略,这是我使用 fetch 的行。

   CREATE OR REPLACE PROCEDURE enable_trigg_proc
   IS
    v_trigger_name trigger_name.user_triggers%TYPE;

    CURSOR enable_trigg_cur
    IS
    SELECT TRIGGER_NAME INTO v_trigger_name
    FROM user_triggers
    WHERE STATUS = 'DISABLED';


    BEGIN
     OPEN enable_trigg_cur;
    LOOP
     FETCH enable_trigg_cur INTO v_trigger_name ;
      EXIT WHEN enable_trigg_cur%NOTFOUND;

EXECUTE IMMEDIATE  'ALTER TRIGGER v_trigger_name  ENABLE';
    END LOOP;
  close enable_trigg_cur;
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql database-cursor

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