假设有一个名为" GROUP_DETAILS"的表,该表具有列(名称,代码,DESCRIPTION)。
因此,该表如下所示:
我正在尝试在表格的所有列中找到换行符。 然后,一旦找到该列,我也想显示为输出。 我已经创建了如下脚本:
DECLARE
BEGIN
FOR r IN (SELECT column_name FROM user_tab_columns WHERE TABLE_NAME = 'GROUP_DETAILS') LOOP
SELECT r FROM GROUP_DETAILS WHERE INSTR(r, CHR(10)) > 0;
END LOOP;
END;
我收到如下错误:
Error report -
ORA-06550: line 4, column 48:
PLS-00382: expression is of wrong type
ORA-06550: line 4, column 12:
PLS-00382: expression is of wrong type
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:
%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
为什么标有MySQL?
使用r.column_name获取列名,并将其更改为动态查询,在此情况下,您将列名与两个地方的查询字符串连接在一起。 它还缺少INTO子句,无法在变量中获取字符串。
@tadman我认为他们在开发时并没有什么不同
我在"答案"中提供了另一种方法,但是如果您只是想知道是什么触发了PLS-00382,那是您传递给instr的chr(10)参数。 您必须将其括在单引号中,以使其成为字符串。
MySQL和Oracle之间的语法可能完全不同。 尝试一次将您的问题仅集中在一个平台上,以免造成混淆。 无论您现在与谁一起工作,要么/或者。
@tadman我明白了。 我的其他问题或答案将有助于避免混淆。
您需要在PL / SQL中执行此操作吗? 您可以使用普通的SQL获取有问题的行,如下所示:
SELECT name, code, description,
CASE WHEN name LIKE '%' || CHR(10) || '%' THEN 'name, ' END ||
CASE WHEN code LIKE '%' || CHR(10) || '%' THEN 'code, ' END ||
CASE WHEN description LIKE '%' || CHR(10) || '%' THEN 'description' END
AS where_found
FROM group_details
WHERE name LIKE '%' || CHR(10) || '%'
OR code LIKE '%' || CHR(10) || '%'
OR description LIKE '%' || CHR(10) || '%';
这将返回所有行,其中至少一列包含换行符,并且计算出的where_found列将准确告诉您哪些列具有这些值。 (它们也将清晰可见;如果需要,计算出的列可用于进一步处理。)