小编Dav*_*dEG的帖子

如何使用动态SQL设置复合变量字段的值

鉴于此类型:

-- Just for testing purposes:
CREATE TYPE testType as (name text)
Run Code Online (Sandbox Code Playgroud)

我可以使用此函数动态获取字段的值:

CREATE OR REPLACE FUNCTION get_field(object anyelement, field text) RETURNS text as
$BODY$
DECLARE
    value text;
BEGIN
    EXECUTE 'SELECT $1."' || field || '"'
      USING object
       INTO value;

    return value;
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

呼叫get_field('(david)'::testType, 'name')按预期工作返回"大卫".

但是如何在复合类型中设置字段的值?我试过这些功能:

CREATE OR REPLACE FUNCTION set_field_try1(object anyelement, field text, value text)
RETURNS anyelement
as
$BODY$
DECLARE
    value text;
BEGIN
    EXECUTE '$1."' || field || '" := $2'
      USING object, value; …
Run Code Online (Sandbox Code Playgroud)

postgresql types stored-procedures composite plpgsql

12
推荐指数
3
解决办法
2万
查看次数

对于PL/SQL中的循环和列

我是PL/SQL的新手.我在这种语言中遇到循环问题.我想像这样循环:

FOR nr IN 1..102 
LOOP
  DBMS_OUTPUT.PUT_LINE(nr);
  IF rec.column_||nr IS NULL
    THEN
    DBMS_OUTPUT.PUT_LINE('test');
  END IF;
END LOOP;
Run Code Online (Sandbox Code Playgroud)

我创建了一个游标.如您所见,我想检查列号为column_1到column_102的所有列.不幸的是|| 运营商不适用于这种情况.你知道我的问题的一些解决方案吗?

sql database oracle plsql

3
推荐指数
1
解决办法
913
查看次数

使用%TYPE在PostgreSQL中声明复合类型的变量

问题:如何在存储函数中声明相同类型的变量参数?

简单的答案是使用%TYPE,这有效:

CREATE OR REPLACE FUNCTION test_function_1(param1 text)
  RETURNS integer AS
$BODY$ 
DECLARE
    myVariable param1%TYPE;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
Run Code Online (Sandbox Code Playgroud)

但问题是何时param1是复合类型:

CREATE TYPE comp_type as
(
    field1 text
)

CREATE OR REPLACE FUNCTION test_function_2(param1 comp_type)
  RETURNS integer AS
$BODY$ 
DECLARE
    myVariable param1%TYPE;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
Run Code Online (Sandbox Code Playgroud)

这不起作用:

ERROR: type comp_type does not exist [SQL State=42704]
Run Code Online (Sandbox Code Playgroud)

那么当param1复合型时我该怎么办?

(注意:myVariable comp_type因为我的功能稍微复杂一点, …

postgresql polymorphism types stored-procedures plpgsql

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

如何在vimscript中获取缓冲区类型

给定缓冲区 ID,如何获取缓冲区的缓冲区类型?我知道我可以切换到该缓冲区并用于:set buftype?获取类型。

但是我怎么能不跳到那个缓冲区呢?

(我希望有类似的buftype(id)工作方式bufname(id)

vim

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