2024年能否用相同语法在SQL Server与Oracle中调用函数?
2024年能否用同一条SQL语句在SQL Server和Oracle中调用函数?
答案是可以,只要针对两个数据库做简单配置,就能让同一条语句在两边正常运行,具体有两种可行思路:
思路一:使用不带模式前缀的通用语句
用这条统一语句:
SELECT GetSquare(Item) AS SquareValue FROM Squares;
- 在SQL Server中:将执行语句的用户默认架构设为
dbo,这样SQL Server会自动在默认架构下查找GetSquare函数,无需手动添加dbo.前缀。设置语句如下:ALTER USER [你的用户名] WITH DEFAULT_SCHEMA = dbo; - 在Oracle中:确保
GetSquare函数创建在当前用户的schema下,或者给函数创建同义词、调整用户的搜索路径,让Oracle能直接定位到这个函数即可。
思路二:使用带模式前缀的通用语句
用这条统一语句:
SELECT dbo.GetSquare(Item) AS SquareValue FROM Squares;
- 在SQL Server中:函数默认部署在
dbo架构下的话,这条语句原本就符合语法要求,不需要额外调整。 - 在Oracle中:需要先创建名为
dbo的schema(用户),把GetSquare函数部署到该schema下,再给执行语句的用户授予访问权限,示例操作如下:-- 创建dbo用户(schema) CREATE USER dbo IDENTIFIED BY 你的密码; -- 授予dbo用户创建函数的权限 GRANT CREATE PROCEDURE TO dbo; -- 给当前执行语句的用户授予访问dbo.GetSquare的权限 GRANT EXECUTE ON dbo.GetSquare TO 你的用户名;
完成配置后,这条带dbo.前缀的语句就能在Oracle中正常执行了。
不管选择哪种思路,都能实现2024年用完全相同的SQL语句在两个数据库中调用目标函数。
内容的提问来源于stack exchange,提问作者Vy8
相关产品推荐
相关产品推荐

