【问题标题】:mysql cursor fetch without declaring variables (possible?)mysql游标获取而不声明变量(可能吗?)
【发布时间】:2013-03-18 07:46:54
【问题描述】:

我有一个这样声明的游标:

DECLARE staging_cur CURSOR FOR
SELECT 
col1, col2, ......
FROM crawl_db.staging_listing
WHERE is_deleted = FALSE;

然后我获取每一行,执行一些检查,然后将该行插入另一个(生产)数据库

OPEN staging_cur;
the_loop: LOOP

  FETCH staging_cur
  INTO col1_val, col2_val,.....;

  -- perform some checks and some optional inserts
      -- for example, if city with given name is not found in production DB, insert it

  -- insert into production db

END LOOP the_loop;

我意识到我需要为表 staging_listing (col1, col2....) 的每个对应列声明一个变量 (col1_val, col2_val ...)。问题是这个表包含90-100列,声明所有变量真的很麻烦

似乎应该有比这更好的方法。是否有某种方法可以访问游标当前行的列,而无需声明单独的变量来保存列值?

【问题讨论】:

  • 变量的用途是什么?
  • 其中一些用于“执行一些检查”步骤。其中大部分用于“插入生产数据库”步骤。

标签: mysql cursor


【解决方案1】:

如果您需要将行插入另一个表,那么更好的方法是使用 INSERT...SELECT 语句。尽量避免使用游标。

INSERT ... SELECT Syntax.

【讨论】:

  • 实际上每行都有一些检查和可选插入。基于这些可选插入,我们在进一步的插入中使用它们自动生成的插入 ID。 (我已经更新了我的问题)
  • 如果可能 - 尝试使用 DML 语句:INSERT、UPDATE 等;否则,您将不得不创建这些变量。
猜你喜欢
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多