我正在使用Firebird 2.5.0。我知道一个值,并需要找到出现该值的所有表和列。
我创建了存储过程:
CREATE OR ALTER PROCEDURE NEW_PROCEDURE (
searching_value varchar(30))
returns (
table_with_value varchar(100),
column_with_value varchar(100))
as
declare variable all_tables varchar(50);
declare variable all_columns varchar(50);
declare variable all_values varchar(50);
begin
FOR SELECT
r.rdb$relation_name, f.rdb$field_name
from rdb$relation_fields f
join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
and r.rdb$view_blr is null
and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
order by 1, f.rdb$field_position INTO :all_tables, :all_columns
DO
BEGIN
FOR SELECT all_columns FROM all_tables
INTO :all_Values
DO
BEGIN
IF (SEARCHING_VALUE = all_Values) THEN
BEGIN
table_With_Value = all_Tables;
column_With_Value = all_Columns;
SUSPEND;
END
END
END
END^
当我运行它时,出现错误信息:
未定义的名称。
动态SQL错误。
SQL错误代码= -204。
未知表。
ALL_TABLES。
在第21行,第13列。
因此,在这个select语句“SELECT all_columns FROM all_tables”中,它并没有从之前的select语句中获取值,而是只尝试查找表all_tables。如何修复它?
EXECUTE STATEMENT
。 - Mark Rotteveel