如何将此功能 oracle 转换为 sql 服务器
How to convert this function oracle to sql server
如何将此功能从 Oracle 转换到 SQL 服务器?
FUNCTION PorcImpuesto (pCompania IN VARCHAR2)
RETURN FLOAT
AS
vImpuesto FLOAT;
vLink VARCHAR (100);
vTipoIva VARCHAR (10);
BEGIN
SELECT NVL (DBLINK, ''), IMPUESTO
INTO vLink, vTipoIva
FROM SAV_PAIS
WHERE COMPANIA = pCompania;
EXECUTE IMMEDIATE 'SELECT (NVL(IMPUESTO1,0) / 100)
FROM '
|| pCompania
|| '.IMPUESTO'
|| vLink
|| '
WHERE IMPUESTO = '''
|| vTipoIva
|| ''''
INTO vImpuesto;
RETURN vImpuesto;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
WHEN OTHERS
THEN
RETURN 0;
END;
CREATE FUNCTION APEX.PORCIMPUESTO
(
@pCompania VARCHAR(4000)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @vImpuesto FLOAT
DECLARE @vLink VARCHAR(100)
DECLARE @vTipoIva VARCHAR(10)
SELECT @vLink = ISNULL(DBLINK, ''),
@vTipoIva = IMPUESTO
FROM SAV_PAIS
WHERE COMPANIA = @pCompania
EXECUTE 'SELECT (ISNULL(IMPUESTO1,0) / 100)
FROM '
|| @pCompania
|| '.IMPUESTO'
|| vLink
|| '
WHERE IMPUESTO = '''
|| vTipoIva
|| ''''
INTO vImpuesto;
RETURN @vImpuesto;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
WHEN OTHERS
THEN
RETURN 0;
END;
很难说 - 我没有你的桌子和任何东西 - 但你需要 一些东西 像这样......
CREATE FUNCTION APEX.PORCIMPUESTO (@pCompania VARCHAR(4000))
RETURNS DECIMAL(20, 4) -- or whatever precision you need
AS
BEGIN
DECLARE @vImpuesto DECIMAL(20, 4)
DECLARE @vLink VARCHAR(100)
DECLARE @vTipoIva VARCHAR(10)
SELECT
@vLink = ISNULL(DBLINK, ''),
@vTipoIva = IMPUESTO
FROM
SAV_PAIS
WHERE
COMPANIA = @pCompania
-- declare a NVARCHAR variable to hold the SQL statement you want to execute
DECLARE @SqlStmt NVARCHAR(1000)
-- define the SQL query to execute - and **PLEASE** use parameters wherever possible!
SET @SqlStmt = N'SELECT (ISNULL(IMPUESTO1, 0) / 100) FROM ' + @pCompania + N'.IMPUESTO' + vLink + N' WHERE IMPUESTO = @TipoIva';
-- try/catch to handle exceptions
BEGIN TRY
-- execute the stored procedure and channel data into temporary table
INSERT INTO #vImpuesto
EXEC sp_executesql @stmt = @SqlStmt, @params = N'@TipoIva VARCHAR(10)', @TipoIva = @vTipoIva
-- select all columns, all rows from that temporary table as returned result set
SELECT *
FROM #vImpuesto
END TRY
BEGIN CATCH
-- handle your exception case here
END
END;
如何将此功能从 Oracle 转换到 SQL 服务器?
FUNCTION PorcImpuesto (pCompania IN VARCHAR2)
RETURN FLOAT
AS
vImpuesto FLOAT;
vLink VARCHAR (100);
vTipoIva VARCHAR (10);
BEGIN
SELECT NVL (DBLINK, ''), IMPUESTO
INTO vLink, vTipoIva
FROM SAV_PAIS
WHERE COMPANIA = pCompania;
EXECUTE IMMEDIATE 'SELECT (NVL(IMPUESTO1,0) / 100)
FROM '
|| pCompania
|| '.IMPUESTO'
|| vLink
|| '
WHERE IMPUESTO = '''
|| vTipoIva
|| ''''
INTO vImpuesto;
RETURN vImpuesto;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
WHEN OTHERS
THEN
RETURN 0;
END;
CREATE FUNCTION APEX.PORCIMPUESTO
(
@pCompania VARCHAR(4000)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @vImpuesto FLOAT
DECLARE @vLink VARCHAR(100)
DECLARE @vTipoIva VARCHAR(10)
SELECT @vLink = ISNULL(DBLINK, ''),
@vTipoIva = IMPUESTO
FROM SAV_PAIS
WHERE COMPANIA = @pCompania
EXECUTE 'SELECT (ISNULL(IMPUESTO1,0) / 100)
FROM '
|| @pCompania
|| '.IMPUESTO'
|| vLink
|| '
WHERE IMPUESTO = '''
|| vTipoIva
|| ''''
INTO vImpuesto;
RETURN @vImpuesto;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
WHEN OTHERS
THEN
RETURN 0;
END;
很难说 - 我没有你的桌子和任何东西 - 但你需要 一些东西 像这样......
CREATE FUNCTION APEX.PORCIMPUESTO (@pCompania VARCHAR(4000))
RETURNS DECIMAL(20, 4) -- or whatever precision you need
AS
BEGIN
DECLARE @vImpuesto DECIMAL(20, 4)
DECLARE @vLink VARCHAR(100)
DECLARE @vTipoIva VARCHAR(10)
SELECT
@vLink = ISNULL(DBLINK, ''),
@vTipoIva = IMPUESTO
FROM
SAV_PAIS
WHERE
COMPANIA = @pCompania
-- declare a NVARCHAR variable to hold the SQL statement you want to execute
DECLARE @SqlStmt NVARCHAR(1000)
-- define the SQL query to execute - and **PLEASE** use parameters wherever possible!
SET @SqlStmt = N'SELECT (ISNULL(IMPUESTO1, 0) / 100) FROM ' + @pCompania + N'.IMPUESTO' + vLink + N' WHERE IMPUESTO = @TipoIva';
-- try/catch to handle exceptions
BEGIN TRY
-- execute the stored procedure and channel data into temporary table
INSERT INTO #vImpuesto
EXEC sp_executesql @stmt = @SqlStmt, @params = N'@TipoIva VARCHAR(10)', @TipoIva = @vTipoIva
-- select all columns, all rows from that temporary table as returned result set
SELECT *
FROM #vImpuesto
END TRY
BEGIN CATCH
-- handle your exception case here
END
END;