例如:
abc:='select * from table1';
Run Code Online (Sandbox Code Playgroud)
result:='create view'||quote_ident(view1)||'as'||abc;
Run Code Online (Sandbox Code Playgroud) 例如:我有一个名为“view1”的视图,其中包含“name”和“slno”列,现在我希望使用名为“f1”的函数显示它,如下所示:
- 功能
create or replace function f1(viewname varchar)
returns table (name varchar,slno integer) as
$body$
begin
return query
select * from viewname;
end;
$body$
language plpgsql;
Run Code Online (Sandbox Code Playgroud) 我有这个功能。它还不完整,也没有做任何有意义的事情,但在编写过程中我遇到了这个错误:
ERROR: syntax error at or near "LOOP"
LINE 26: END LOOP;
Run Code Online (Sandbox Code Playgroud)
有人可以看看我的代码并明白为什么吗?我的 for 循环语法对我来说看起来很好。
CREATE FUNCTION assignGrades(prob numeric[], school_name text, school_id bigint) RETURNS void AS $$
DECLARE
num_grades integer ARRAY[6];
found_school school_probs%ROWTYPE;
num_students simulated_records%ROWTYPE;
num_students_int bigint;
random_record simulated_records%ROWTYPE;
BEGIN
SELECT INTO found_school * FROM school_probs WHERE school_code = school_id;--select the prob dist
SELECT INTO num_students * FROM simulated_records WHERE school = school_name;
SELECT COUNT(*) INTO num_students_int FROM simulated_records WHERE school = school_name;
num_grades[1] = num_students_int*found_school.probs[1];
num_grades[2] = num_students_int*found_school.probs[1];
num_grades[3] …Run Code Online (Sandbox Code Playgroud) 我想创建一个触发器来捕获INSERT并UPDATE根据操作执行某些操作。在 Oracle 中可以这样做:
CREATE OR REPLACE TRIGGER ABC_BIU BEFORE INSERT OR UPDATE ON ABC
FOR EACH ROW
BEGIN
IF INSERTING THEN
...
END IF;
...
END;
Run Code Online (Sandbox Code Playgroud)
这里提到that是Oracle中INSERTING与the结合使用的一个关键字,在这里你可以看到用法:TRIGGER
IF INSERTING THEN ... END IF;
IF UPDATING THEN ... END IF;
Run Code Online (Sandbox Code Playgroud) 有人可以礼貌地解释这种疯狂吗?
INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "UserProfileId" INTO _UserProfileId;
Run Code Online (Sandbox Code Playgroud)
抛出一个模棱两可的引用错误,但是这可以正确执行:
INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "dbo"."UserProfile"."UserProfileId" INTO _UserProfileId;
Run Code Online (Sandbox Code Playgroud)
_UserProfileId是一个声明的整数变量。我在手册中找不到任何对这种语法的引用,或者为什么这在任何方面都是模棱两可的。
我正在尝试获取 plpgsql 中两个日期之间的工作日数。以下是我的代码:
CREATE FUNCTION weekdays(DATE, DATE) RETURNS INTEGER AS
$$
DECLARE
d date := $1;
weekdays integer := 0
BEGIN
LOOP
IF select extract(dow from date d) != 6 or select extract(dow from date d) != 0
weekdays := weekdays +1
END IF
d := d + 1;
EXIT WHEN d > $2;
END LOOP;
RETURN weekdays;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到以下错误:
Run Code Online (Sandbox Code Playgroud)Unterminated dollar quote started at position 56 in SQL CREATE FUNCTION weekdays(DATE, DATE) RETURNS INTEGER AS …
我想要一个返回连接字符串的函数。在 postgresql 中执行此函数后出现以下错误。
CREATE OR REPLACE FUNCTION getTableName ()
RETURNS text AS $$
DECLARE
state_short_name text;
BEGIN
state_short_name := (select lower(state_short_name) from mst_state where state_code in (SELECT substr(entity_code,1,2) FROM shg_detail_share WHERE entity_code = '3420006002001'))
RETURN (CONCAT(state_short_name, '_shg_detail'));
END;
$$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
我希望输出像'jh_shg_detail',但我收到这样的错误
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "(" LINE 9: RETURN (CONCAT(state_short_name, '_shg_detail'));
我在 plpgsql 中创建了一个函数,我试图从 .net core api 调用存储过程,但我在 c# 中遇到以下异常
42883:函数 proc_insert_test(brndcode => 整数,brndname => 字符变化,brndsname => 字符变化,prdtype => 字符,中断 => 字符,crddate => 日期,状态 => 整数,recstat => 整数,brndgrpseqno =>整数,wefrom => date) 不存在
没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。
程序:
CREATE OR REPLACE FUNCTION public.proc_insert_test(p_brndcode integer,
p_brndname varchar(100),
p_brndsname varchar(100),
p_prdtype char(1),
p_discontinue char(1),
p_crddate date,
p_status integer,
p_recstat integer,
p_brndgrpseqno integer,
p_wefrom date)
RETURNS char
LANGUAGE plpgsql
AS $body$
BEGIN
Insert into arc_mmstbrndgroup(brndcode, brndname, brndsname, prdtype, discontinue, crddate, status, recstat, brndgrpseqno, wefrom)
values(p_brndcode, p_brndname, p_brndsname, p_prdtype, …Run Code Online (Sandbox Code Playgroud) :=SQL中的运算符是什么意思?我正在使用 Postgresql,但我不知道它是什么意思。我有这个代码:
DECLARE
i RECORD;
q TEXT[];
cfg_rec RECORD;
BEGIN
SELECT * FROM xxx_private.function() INTO cfg_rec;
q:=q || cfg_rec.q;
Run Code Online (Sandbox Code Playgroud) 我有一个问题,当我尝试执行以下代码时遇到了这个问题:
CREATE OR REPLACE FUNCTION USP_IP_CREA_AUDITORIA_VER_CONSTRASENA
(p_usuarioObservado td_codigo10
,p_codigoEmpresaObservado td_codigo10
,p_usuario td_codigo10
,p_codigoEmpresa td_codigo10
,p_direccionIP td_ip_auditoria) RETURNS VOID
AS $$
BEGIN
INSERT INTO IP_MV_AUDITORIA_VER_CONSTRASENA(cod_usuario_observado, cod_empresa_observado, cod_usuario_registro, cod_empresa, des_ip_registro)
VALUES(p_usuarioObservado, p_codigoEmpresaObservado, p_usuario, p_codigoEmpresa, p_direccionIP)
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
CREATE OR REPLACE FUNCTION USP_IP_CREA_AUDITORIA_VER_CONSTRASENA
(p_usuarioObservado td_codigo10
,p_codigoEmpresaObservado td_codigo10
,p_usuario td_codigo10
,p_codigoEmpresa td_codigo10
,p_direccionIP td_ip_auditoria) RETURNS VOID
AS $$
BEGIN
INSERT INTO IP_MV_AUDITORIA_VER_CONSTRASENA(cod_usuario_observado, cod_empresa_observado, cod_usuario_registro, cod_empresa, des_ip_registro)
VALUES(p_usuarioObservado, p_codigoEmpresaObservado, p_usuario, p_codigoEmpresa, p_direccionIP)
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud) 我有一个函数,使我需要使用SIMILAR TO带有变量的表达式的选择,我不知道如何做到这一点.这是代码:
DECLARE pckg_data cl_data;
DECLARE contacts contacts_reg%ROWTYPE;
DECLARE sim_name varchar;
BEGIN
SELECT client_reg._name,
client_reg.last_name,
client_reg.id_card,
client_reg.address
INTO pckg_data
FROM client_reg WHERE(client_reg._name = (cl_name ||' '|| cl_lastname));
RETURN NEXT pckg_data;
SELECT ('%'||cl_name || ' ' || cl_lastname ||'%') INTO sim_name;
FOR contacts IN SELECT contacts_reg.id
FROM contacts_reg, contactscli_asc, client_reg
WHERE(contacts_reg._name SIMILAR TO sim_name) LOOP
SELECT client_reg._name, client_reg.last_name, client_reg.id_card,
client_reg.address, client_reg.id
INTO pckg_data
FROM client_reg, contactscli_asc WHERE(contactscli_asc.contact = contacts.id
AND client_reg.id = contactscli_asc.client);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud) 我有一个名为 empl 的表,还有另一个表 new_empl 与 empl 具有相同的列和定义。是否可以使用以下代码在 new_empl 中从 v_record 插入记录?
DECLARE
v_record empl%rowtype;
BEGIN
Insert into new_empl values v_record;
END;
Run Code Online (Sandbox Code Playgroud)
empl 表中有太多列,我想避免列出它们。
plpgsql ×12
postgresql ×12
dynamic-sql ×2
sql ×2
c# ×1
colon-equals ×1
concat ×1
oracle ×1
rowtype ×1
sql-insert ×1
time-series ×1
triggers ×1