在存储过程中使用限定的表名,例如在SQL Server中可以使用“dbo.”前缀限定表名:
CREATE PROCEDURE myProcedure
AS
BEGIN
SELECT * FROM dbo.myTable;
END
如果表名在存储过程中未经限定,则可以使用三个方案来解决该问题:
SET search_path = mysql,pg_catalog;
SELECT ddl
FROM babelfishpg_tables
WHERE schemaname = 'mysql'
AND tablename = 'myTable';
然后将DDL语句复制到存储过程中,这样可以确保所有表名都是限定的。
CREATE PROCEDURE myProcedure
AS
BEGIN
SELECT * FROM public.myTable;
END
CREATE INDEX myIndex ON babelfish_mysql.myTable (myColumn);
这将在Babelfish中创建一个别名,使得未经限定的表名“myTable”被解析为“babelfish_mysql.myTable”。这样,存储过程就可以使用未经限定的表名了。