标签:00 dbo -- 创建 SQLserver SQL ORACLE
--问题:同一个SQL语句如何实现在ORACLE和SQLserver中查询某一天的数据 --背景:项目需要共用SQL语句,通过配置文件中的数据库连接串和数据库类别,创建不同的数据库访问对象, -- 调用时的SQL入参字符串是共用的,因为SQLserver和ORECLE处理时间字段稍微有差异,导致sql带时间过滤时无法同时兼容两种数据库。 --例如: --SQLserver查询某天数据 SELECT A.* FROM mytest A WHERE a.TIMES>'2021-08-01 00:00:00' ----ORACEL查询某天数据 SELECT A.* FROM mytest A WHERE a.TIMES>TO_DATE('2021-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') --方案:同时在SQLserver和ORACEL创建一个同名的函数,将字符串转为日期格式 -- 因为SQLserver标量函数调用必须加dbo.且无法省略,处理方式为在ORACEL中 -- 创建一个名为dbo的包,将ORECLE的函数放入包中,最终达到一句SQL兼容两种数据库的目的。 --SQLserver创建函数将字符串转日期 CREATE FUNCTION [dbo].[F_ConvertStrToDate](@dateStr VARCHAR(100)) RETURNS DATETIME AS BEGIN DECLARE @temp DATETIME; SELECT @temp = CONVERT(DATETIME, @dateStr) RETURN @temp; END; --ORACLE创建一个包(dbo),将同名函数(F_ConvertStrToDate)放入包中 --创建包: CREATE PACKAGE DBO IS FUNCTION F_CONVERTSTRTODATE(H IN VARCHAR2) RETURN DATE; END; --创建包体 CREATE PACKAGE BODY DBO IS FUNCTION F_CONVERTSTRTODATE(H IN VARCHAR2) RETURN DATE AS BEGIN DBMS_OUTPUT.ENABLE(BUFFER_SIZE=>NULL); DBMS_OUTPUT.PUT_LINE(H); RETURN TO_DATE(H,'YYYY-MM-DD HH24:MI:SS'); END; END; --最终效果 SELECT A.* FROM mytest A WHERE a.TIMES>dbo.F_ConvertStrToDate('2021-08-01 00:00:00')--SQL同时可在ORACEL和SQLserver中执行
标签:00,dbo,--,创建,SQLserver,SQL,ORACLE 来源: https://www.cnblogs.com/soulsjie/p/15816815.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。