标签: plpgsql

0
推荐指数
1
解决办法
5842
查看次数

PostgreSQL:如何将表/视图名称作为参数传递给 PostgreSQL 中的函数?

例如:我有一个名为“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)

postgresql dynamic-sql plpgsql

0
推荐指数
1
解决办法
497
查看次数

FOR LOOP 处的语法错误

我有这个功能。它还不完整,也没有做任何有意义的事情,但在编写过程中我遇到了这个错误:

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)

sql postgresql plpgsql

0
推荐指数
1
解决办法
5146
查看次数

PostgreSQL 相当于从 Oracle 插入的内容是什么?

我想创建一个触发器来捕获INSERTUPDATE根据操作执行某些操作。在 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)

oracle postgresql triggers plpgsql database-trigger

0
推荐指数
1
解决办法
1368
查看次数

INSERT INTO ... RETURNING - 不明确的列引用

有人可以礼貌地解释这种疯狂吗?

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是一个声明的整数变量。我在手册中找不到任何对这种语法的引用,或者为什么这在任何方面都是模棱两可的。

postgresql plpgsql sql-insert postgresql-9.3

0
推荐指数
1
解决办法
2253
查看次数

计算两个日期之间的工作日数

我正在尝试获取 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)

但是,我不断收到以下错误:

Unterminated dollar quote started at position 56 in SQL
CREATE FUNCTION weekdays(DATE, DATE) RETURNS INTEGER AS …
Run Code Online (Sandbox Code Playgroud)

postgresql time-series plpgsql

0
推荐指数
1
解决办法
2908
查看次数

如何在postgresql函数中连接两个字符串?

我想要一个返回连接字符串的函数。在 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',但我收到这样的错误

ERROR:  syntax error at or near "("
LINE 9:    RETURN (CONCAT(state_short_name, '_shg_detail')); 
Run Code Online (Sandbox Code Playgroud)

postgresql concat plpgsql

0
推荐指数
1
解决办法
2516
查看次数

如何从 C# 调用 plpgsql 函数

我在 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)

c# postgresql plpgsql

0
推荐指数
1
解决办法
8330
查看次数

:= 在 SQL 中的含义

:=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)

sql postgresql plpgsql colon-equals

-1
推荐指数
1
解决办法
1万
查看次数

错误:“END”SQL 状态处或附近出现语法错误:42601

我有一个问题,当我尝试执行以下代码时遇到了这个问题:

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)

postgresql plpgsql

-1
推荐指数
1
解决办法
7240
查看次数

如何使用postgresql SIMILAR TO和变量

我有一个函数,使我需要使用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)

postgresql plpgsql pattern-matching

-2
推荐指数
1
解决办法
5667
查看次数

将 %rowtype 数据插入另一个表 - plpgsql / Postgres

我有一个名为 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 表中有太多列,我想避免列出它们。

postgresql plpgsql rowtype

-2
推荐指数
1
解决办法
3111
查看次数