我是Postgres noobie。
我正在尝试将SQL Server存储的proc转换为Postgres函数。目前还不知道如何将此SQL行转换为Postgres。
SQL Server:
input: @name = null
SELECT *
FROM table
WHERE name = ISNULL(@name, name)
Postgres:
input: n = null
SELECT *
FROM table
WHERE name = COALESCE(n, name)
我得到的错误是"column I not exist“。如何在Postgres函数中引用selec
我使用这个脚本从Postgres获取数据。
POSTGRES_PORT = 'xxxx'
POSTGRES_USERNAME = 'xxx' ## CHANGE THIS TO YOUR PANOPLY/POSTGRES USERNAME
POSTGRES_PASSWORD = 'xxx' ## CHANGE THIS TO YOUR PANOPLY/POSTGRES PASSWORD POSTGRES_DBNAME = 'xxxx' ## CHANGE THIS TO YOUR DATABASE NAME
POSTGRES_DB
我想将多个查询分组到一个驻留在PostgreSQL中的函数中。该函数将使用PDO查询。
其职能是:
CREATE OR REPLACE FUNCTION "test_multipe_refcursor"()
RETURNS SETOF refcursor AS $BODY$
DECLARE
parentRC refcursor;
childRC refcursor;
BEGIN
open parentRC FOR
SELECT * FROM parent;
RETURN NEXT parentRC;
open childRC FOR
SELECT *
甲骨文:
STR_SQL := ' SELECT ... where x = :1 and y = :2';
OPEN RS FOR STR_SQL USING VAR1, VAR2;
Postgres:
STR_SQL := ' SELECT ... where x = $1 and y = $2';
OPEN RS FOR EXECUTE STR_SQL USING VAR1, VAR2;
我如何在Server中做到这一点?我只想避免多个执行计划
编辑:
在带有@的查询中使用变量是否保留执行计划?
SET @RS = CURSOR FOR SELECT .
创建了这个Postgres函数,该函数工作正常,但实际要求是将函数中的输入参数传递给使用动态SQL的游标,如下所示: 下面是函数 CREATE OR REPLACE FUNCTION ssp2_pcat.find_shift_dates (date_to_find date)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
C1 CURSOR FOR
SELECT TABLE_NAME, 'SELECT COUNT(*) FROM ' || TABLE
在SQL Server中,我使用跟随SQL找到一个打开的游标,并在一个'catch‘块中关闭它。
IF EXISTS(SELECT 1 FROM sys.dm_exec_cursors(@@SPID) WHERE [name] = 'Crsr_IDs' AND IS_OPEN = 1)
BEGIN
CLOSE Crsr_IDs
DEALLOCATE Crsr_IDs
END
以类似的方式,如何在Postgres中找到一个在异常块中具有特定名称的打开游标并关闭它?
我需要在Oracle上使用动态SQL执行,其中我不知道运行时之前SQL中使用的绑定变量的确切数量。
在对EXECUTE IMMEDIATE的调用中是否有方法使用绑定变量的变量数?
更具体地说,我需要将一个参数传递到未知的中,但我不知道在那里使用它的频率。
我试过
EXECUTE IMMEDIATE 'SELECT SYSDATE FROM DUAL WHERE :var = :var' USING 1;
但它又回到了ORA-01008: not all variables bound.
我有一个简单的PostgreSQL脚本,并尝试运行带游标的for循环以获取作为分页的行:
begin;
declare curs cursor for select id from postgres.core.security_group order by id asc;
fetch 4 from curs;
commit;
工作得很好,但是当我在其中添加一个for循环时,就不能工作了:
CREATE OR REPLACE FUNCTION postgres.core.cursor_selection()
RETURNS SETOF varchar AS
$func$
DECLARE
在尝试再次打开游标之前,如何确保在游标已经存在的情况下释放它?
对于一张桌子,我可以使用如下所示:
if exists (select top 1 from tempdb.sys.tables where name = '##tmpTable')
drop table ##tmpTable;
... then I can recreate my ##tmpTable
但我想不出如何为光标做这件事
-- First clean up if already exists..
..... <-
为了获得动态列,我一直试图创建创建动态查询的PL/SQL语句。由于我对这些Oracle /SQL语句不太了解,所以我对一些事情感到困惑。
是否必须有存储过程来创建动态查询?
下面的查询不会抛出任何错误,甚至不会导致任何结果。在下面的查询中,我要做的是根据FKBAB_SOURCE_ID ( PFS_SOURCE_ID.的外键)获取FKOD_AMOUNT的和
declare
sql_query varchar2(3000) := 'select FKOM_OFFICE_ID,FKBAM_BUDGET_ID ';
begin
for x in
我在postgres中有一个存储函数:
CREATE FUNCTION return_curs() RETURNS refcursor AS $$
BEGIN
OPEN cursor_x FOR SELECT col FROM table_y;
RETURN cursor_x;
END; $$
然后,在Python中,我想调用这个过程,用psycopg2逐行为exapmle提取返回游标。有什么办法可以做到吗?谢谢。
我有一个postgresql函数,所以如下:
CREATE OR REPLACE FUNCTION query_callouts(
INOUT io_cursor_ref refcursor,
INOUT opstatus integer,
INOUT errtext character varying)
RETURNS record AS
$BODY$
DECLARE
BEGIN
OPEN $1 FOR
SELECT tablename FROM pg_tables limit 10;
--SELECT * from call_out_n
我有一个sql文件,我想使用PostGresOperator将参数传递给这个sql文件。 """select * from table_{} where id > ID """.format(mytable,myID) 我的postGresOperator mport_redshift_table = PostgresOperator(
task_id='copy_data_from_redshift_{}'.format(country),
postgres_conn_id
今天,我们的web应用程序在更新数据库时遇到了问题,但是web应用程序没有重新启动。
经过调查发现,在数据库更新过程中,删除并重新创建了一个用户定义的类型。
类型没有被更改--它只是被删除,并使用与以前相同的sql语句再次创建。
下面的代码可以显示此问题。
在执行第二个准备语句时,存在java.sql.SQLSyntaxErrorException "ORA-00902:无效数据类型“。
String str = "select * from MYTESTTABLE where test in (select column_value from TABLE (?) tmp)
谁能帮助我如何在postgres触发器中从另一个表插入bytea?
CREATE OR REPLACE FUNCTION public.image_insert_trigger()
RETURNS trigger AS
$BODY$DECLARE
dyn_sql text;
tbname text;
img text;
BEGIN
img:=NEW.img;
tbname:='t'||left(NEW.code,4);
dyn_sql:='INSERT INTO '||tbname||' (id,code,img) VAL
出于实际原因,我过去常常在SQL查询中命名参数,就像在使用PDO的php中一样。
那么我可以在node-postgres模块中使用命名参数吗?
目前,我在互联网上看到了许多示例和文档,显示了如下查询:
client.query("SELECT * FROM foo WHERE id = $1 AND color = $2", [22, 'blue']);
但这也是正确的吗?
client.query("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color:
我有一张桌子:
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
DDL:
drop table allitems;
Create Table Allitems(ItemId Int,areas Varchar2(20));
Insert Into Allitems(Itemid,Areas) Values(1,'east');
Insert Into Allitems(ItemId,area
我将SQL查询结果传递给qweb报表,但结果未呈现。我使用Postgres函数来获得结果,使用函数根据传递的参数使用SQL函数秩。视图返回所有结果,因此基于某些参数的排序无效。
self.env.cr.execute("""SELECT id,region,city,year,kpi,result,level,rank_no from kpi_rank('2', 2)""")
results = self.env.cr.fetchall()
if results is not None:
return self.env.
我有一个查询,它使用游标循环显示select语句的结果。
简而言之,select语句从我拥有的映射表中选择所有记录。其中一列是“SourceTableName”。
我使用这个字段来生成一些动态SQL。
我希望在我的存储过程中添加一个参数,如果我传入一个'SourceTableNameFilter‘,它将允许我只为我想要的'SourceTableName’创建动态SQL。
我被一些包装我的动态SQL的逻辑所困扰。
IF @SourceTableNameFilter(SP参数)=@SourceTableName(来自映射表) BEGIN
生成并执行一些基于SourceTableNa
我正在读一本书,它教PL/SQL,但是像许多关于这个主题的资源一样,它提供了围绕它的例子的粗略的细节。有人能帮我解出这个(从课文中逐字摘录)吗?文本没有提供使用代码的示例表。
下面的代码创建一个函数,该函数将根据给定的员工编号返回员工姓名:
CREATE OR replace FUNCTION Getname (p_empno emp.empno%TYPE)
RETURN VARCHAR
IS
CURSOR empname_cur(
p_empno emp.empno%TYPE) IS
SELECT ename
FROM emp
WHERE empn
我的.NET应用程序中有一个函数,它需要搜索未知数量的参数。
例如:select * from tbl where x=1 or x=2 or x=3 or x=4
在.NEt和SQL中可以这样做吗?如何在.NET中创建动态参数(我在考虑使用循环),但是如何在存储过程中声明它们呢?sql有数组吗?
请帮帮忙。
谢谢!
我发现在下面的SQL和动态SQL中使用了游标。Profile带来了相当多的执行计划,我认为它必须处理这个游标。这是一个糟糕的SQL选择吗?
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
我在用
PostgreSQL 13pgAdmin 4执行sql文件(我认为这与此相关,因为奇怪的是,sql文件中的错误似乎取决于它的运行位置(至少取决于这些程序的默认设置)。(关于这一点的任何提示也可能是有用的)
我试图定义一个函数,它接受一个表作为输入,同时输出一个表。但是这里有一个语法错误:
ERROR: syntax error at or near "TABLE"
LINE 77: CREATE TYPE DirectoryIdTableType AS TABLE (id BIGINT);
postgresql似乎不允许表类型。将TABLE作为参数中的数据类型也不起作
我正在尝试使用postgres返回纯json的特性,因此我在Ecto模型中添加了一个方法,该方法执行查询,返回想要的json。
defmodule BoardApi.Board do
use Ecto.Model
def json_by_id(id) do
sql = "SELECT row_to_json(json) AS result FROM (SELECT array_agg(users) AS users FROM users WHERE id=#{id}) json;"
result = Ecto.Adapters.SQL.query(Bo