bfa*_*tto 9 mysql stored-procedures
在存储过程中运行查询时,我从 MySQL 收到此错误:
错误代码:1172 结果包含多于一行
我理解错误:我在做一个SELECT (...) INTO (var list)
,因此查询需要返回单行。当我使用LIMIT 1
or 时SELECT DISTINCT
,错误消失了。
但是:当我手动运行原始查询(没有LIMIT
或DISTINCT
)时,它确实返回了一行。所以我怀疑我可能遇到了 MySQL 错误。有谁知道会发生什么?
编辑
我正在按要求发布 SQL。以下划线开头的所有内容都是在过程中较早声明的变量。当我测试它时,我将替换_cd_pai_vc
为导致问题的记录的 ID。
SELECT a.valor, IFNULL(p.valor, 0), fn_cd2alias(ra.cd_registro), fn_cd2alias(IFNULL(p.valor,0))
INTO _valor, _cd_pai_vc, _alias_verbete, _alias_pai
FROM dados_registros ra
INNER JOIN dados_varchar255 a
ON a.cd_registro = ra.cd_registro
AND a.fl_excluido = 0
AND a.alias = 'vc-verbetes-termo'
LEFT OUTER JOIN dados_registros rp
INNER JOIN dados_int p
ON p.cd_registro = rp.cd_registro
AND p.fl_excluido = 0
AND p.alias = 'vc-remissoes-termo referenciado'
INNER JOIN dados_int pt
ON pt.cd_registro = rp.cd_registro
AND pt.fl_excluido = 0
AND pt.alias = 'vc-remissoes-tipo remissao'
AND fn_cd2alias(pt.valor) = 'hierarquica'
ON ra.cd_registro = rp.cd_entidade
AND rp.fl_excluido = 0
AND fn_cd2alias(rp.cd_modulo) = 'vc-remissoes'
WHERE ra.cd_registro = _cd_pai_vc
AND ra.fl_excluido = 0;
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,当我放置表别名时,它就像一个魅力。
SELECT t.tax_amount,t.tax_percentage FROM nepse_tax t
Run Code Online (Sandbox Code Playgroud)
我在mysql中也遇到过同样的错误。
MySQL 错误 1172 - 结果包含多行
然后我看到了这个问题:
但这不是我想问的。LIMIT 1;
——没有达到我的预期。它只会返回所有情况的第一行。
然后我开始深入研究这个问题,现在我找到了解决方案。
发生这种情况是因为存储过程的代码返回多行,这是因为extra spaces and tab characters
我的代码中有很多行[我为存储过程编写的代码],当我只用一个/两个适当的制表符删除它们时 - 它就像一个飞行机。
不知道你遇到的情况是不是同样的情况。无论如何,尝试一下。
谢谢。
归档时间: |
|
查看次数: |
26229 次 |
最近记录: |