我是SQL的新手,我想知道编写函数的正确方法是什么.我知道像SELECT这样的语句的规范是大写的,但函数的规范是什么?我见过人们用小写写的,其他用大写的.
谢谢您的帮助.
在 PostgreSQL 函数中,检查传入的变量是否包含特定字母的语法是什么?
传递给函数的变量是逗号分隔的字母列表,我想检查此列表是否包含字母 a 或 x。
我想代码看起来像这样:
-- var typically looks like 'a,b,c,x'
if (some way of stripping anything other than a and x from var) ~* [ax]
-- Do something else
end if;
Run Code Online (Sandbox Code Playgroud)
我认为正则表达式是答案,我只是对语法不是 100% 确定。
谢谢!
在SQL Scalar函数中,我们可以使用一个变量返回2个值
ALTER FUNCTION [report].[fGetKPI] (@metricName AS VARCHAR(50))
RETURNS SMALLINT
AS
BEGIN
DECLARE
@kipId AS SMALLINT,
@metricId as SMALLINT;
SELECT TOP 1 @kipId = [KPI_Id], @metricId = [MetricId] FROM report.[KPIDetails] WHERE [MetricName] = @metricName;
IF (@kipId IS NULL OR @metricId IS NULL)
DECLARE @Error AS INT = dbo.fThrowError('No key found for the component "' + @metricName + '"');
RETURN (select @kipId,@metricId);
END
Run Code Online (Sandbox Code Playgroud) 我有以下功能:
CREATE FUNCTION "updateStat"(_request_date timestamp without time zone, _calls integer, _latency integer) RETURNS void AS $$
BEGIN
LOCK TABLE "statistics" IN SHARE ROW EXCLUSIVE MODE;
WITH upsert AS (UPDATE "statistics" set calls = calls + _calls, total_latency = total_latency + _latency WHERE request_date=_request_date RETURNING request_date)
INSERT INTO "statistics" ("request_date", "calls", "total_latency") SELECT _request_date, _calls, _latency WHERE NOT EXISTS (SELECT "request_date" FROM upsert);
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我怎样才能放弃这样的功能?
我尝试了以下方法:
# DROP FUNCTION updateStat(void);
ERROR: function updatestat(void) does not exist
# DROP …Run Code Online (Sandbox Code Playgroud) 我的 postgresql 数据库中有以下功能:
CREATE OR REPLACE FUNCTION get_unused_part_ids()
RETURNS integer[] AS
$BODY$
DECLARE
part_ids integer ARRAY;
BEGIN
create temporary table tmp_parts
as
select vendor_id, part_number, max(price) as max_price
from refinery_akouo_parts
where retired = false
group by vendor_id, part_number
having min(price) < max(price);
-- do some work etc etc
-- simulate ids being returned
part_ids = '{1,2,3,4}';
return part_ids;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION get_unused_part_ids()
OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
这会编译,但是当我运行时:
select get_unused_part_ids();
Run Code Online (Sandbox Code Playgroud)
临时表tmp_parts仍然存在。之后我可以做一个选择。请原谅我,因为我已经习惯了 t-sql/MSSQL 的特定功能。MSSQL 不会出现这种情况。我究竟做错了什么?
我陷入了一个无法解决的小问题。
CREATE FUNCTION dbo.fntblPsmHaendlerDailyCostsinfodump(@pDateString varchar(8), @HaendlerID int, @TableName varchar(100),@CountryID int)
RETURNS table
AS BEGIN
RETURN select top 10 * from tblcountry
END
GO
Run Code Online (Sandbox Code Playgroud)
这给我一个错误-
“开始附近的语法不正确”。
我无法确定为什么会出现错误。
我需要创建一个 SQL Server 函数来检查输入字符串是否包含任何大写字符。如果是,那么它应该返回“OK”。如果不是,则应返回“NOT OKAY”。
当执行以下语句时,它应该返回预期值,如下所示。
PRINT dbo.CheckStringOfUpperAlphaOK('abc') -- Expected: "NOT OK"
PRINT dbo.CheckStringOfUpperAlphaOK('ABC') -- Expected: "OK"
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但我不知道如上所述指定返回值。
CREATE FUNCTION CheckStringOfUpperAlphaOK (@String varchar(MAX))
RETURNS VARCHAR(6)
AS
BEGIN
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^ ][A-Z]%'
While PatIndex(@KeepValues collate Latin1_General_Bin, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues collate
Latin1_General_Bin, @Temp) + 1, 0, ' ')
RETURN @Temp
Run Code Online (Sandbox Code Playgroud)
结尾
每当我将其与其他 sql 语句一起运行时,都会出现错误:
CREATE FUNCTION' 必须是查询批中的第一个语句
但是,每当我单独执行它时(在我的情况下没有 SELECT * FROM CUSTOMER ,它就可以工作)
SELECT * FROM CUSTOMER;
create function udfLogin
(@username nvarchar(100), @password nvarchar(100))
returns int as
begin
if exists(select 1 from CUSTOMER where Username = @username and [Password] = @password)
return 1
return 0;
end
Run Code Online (Sandbox Code Playgroud) 我有一张桌子years(每只耳朵的1号).我想创建一个函数,它接受这些年中的每一年并在另一个表上运行查询来计算属于该年份的行数.我尝试用pl/pgsql实现,使用下面的代码,但我没有让它工作或在Internet上找到任何引用.
CREATE or REPLACE FUNCTION func_test(in AAA date, OUT _result int)
BEGIN
SELECT SUM(st_length(geom)) as BBB
FROM hist_line
WHERE '2006-01-01' BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31');
RETURN _result BBB;
END;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION func_test(date)
select func_test('2009-01-01');
Run Code Online (Sandbox Code Playgroud)
我无法将函数内部的内容查询恢复为函数的输出.
我在Oracle application Express 4.2中有一个SQL查询(PL/SQL函数体返回SQL查询).我创建了一个经典报告,这是我在下面使用的查询.我的查询当前工作正常但我需要使用另一个查询更新此函数中的现有查询,当我尝试更改查询时它不起作用.我究竟做错了什么?任何帮助表示赞赏.
以下是我的工作查询:
declare
a_query varchar2(5000);
this_strin varchar2(50);
begin
a_query := 'select flight_nmbr, sequence_nmbr '||
'from flights '||
'where sequence_nmbr >= 0 and data_version_name = ''' ||
:P3_DATA_VERSION || '''';
if :P3_SEARCH_NUMBER is not null then
if instr(:P3_SEARCH_NUMBER, '%') > 0 then
this_strin := :P3_SEARCH_NUMBER;
else
this_strin := '%'||:P3_SEARCH_NUMBER||'%';
end if;
a_query := a_query||chr(10)||
' and flight_nmbr like '''|| upper(this_strin) ||'''';
end if;
return a_query;
end;
Run Code Online (Sandbox Code Playgroud)
我需要将此函数内的查询更新为以下内容:
SELECT FLIGHT_NMBR, SCHEDULED_LAUNCH_DATE
FROM FLIGHTS
WHERE DATA_VERSION_NAME = 'WORKING' AND
sequence_nmbr …Run Code Online (Sandbox Code Playgroud) sql-function ×10
sql ×6
postgresql ×4
sql-server ×3
function ×2
plpgsql ×2
identifier ×1
mysql ×1
oracle ×1
oracle-apex ×1
plsql ×1
regex ×1
t-sql ×1
temp-tables ×1