我有一个存储过程,它使用该EXECUTE IMMEDIATE命令执行一个非常长的字符串.如何支持非常长的字符串并将数据返回到refcursor中?
如何更新表中的不同列和行?我想做类似的事情来替换SQL服务器中的字符串
我想这样做,但值存在于同一类型的多个列中.值是employee表的外键varchars.每列代表一个任务,因此可以将同一个员工分配给记录中的多个任务,这些任务将在不同记录之间变化.我怎样才能有效地做到这一点?在整个表格中,基本上可以替换所有不同的列.
感谢您的帮助或建议.
干杯,〜在圣地亚哥
我有一个要求,为了使应用程序可扩展和可重用,我必须创建一个规定,用户可以通过该规定通过 XML 文件提供业务对象结构(字段、它们的类型等),并且使用该结构,UI(即控件和完整页面)、数据更新方法(CRUD)和数据库(即表和SP)可以动态自动生成,以满足业务对象的需要。
我“只”听说过实体框架、LINQ 等,但不知道它们是否有助于实现我的愿望。
任何有关如何实现这一设计目标的建议或指导将受到高度赞赏。
万分感谢!
我想完成这个:
update @sourceDatabase.dbo.PredictedPrices
Run Code Online (Sandbox Code Playgroud)
然后设置@sourceDatabase为变量.
但我不被允许?
Incorrect syntax near '.'.
Run Code Online (Sandbox Code Playgroud)
还有另外一种方法吗?
我想编写一个简单的查询来选择PostgreSQL中的多个列.但是,我一直在收到错误 - 我尝试了一些选项,但它们对我不起作用.目前我收到以下错误:
org.postgresql.util.PSQLException:错误:"列"或附近的语法错误
要获取具有值的列,请尝试以下操作:
select * from weather_data where column like '%2010%'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试使用 R 和 postgres 包连接到我的数据库的一些动态 SQL 查询。
不幸的是,如果执行以下语句,我会得到一个空数据框:
x <- "Mean"
query1 <- dbGetQuery(con, statement = paste(
"SELECT *",
"FROM name",
"WHERE statistic = '",x,"'"))
Run Code Online (Sandbox Code Playgroud)
我相信最后一行有语法错误。我已经以各种可能的方式更改了逗号和引号,但似乎没有任何效果。有谁知道如何使用 R 变量通过动态 WHERE 语句构造此 SQL 查询?
这是我想做的事情:
\set values foo,bar,baz
DO $$
DECLARE
value TEXT;
values TEXT[] := string_to_array(:'values', ',');
BEGIN
FOREACH value IN ARRAY values LOOP
raise notice 'v: %', value;
END LOOP;
END $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near ":" SELECT string_to_array(:'values', ',') INTO values... ^
这是我目前的解决方案,但感觉很糟糕:
\set values foo,bar,baz
PREPARE get_values AS SELECT string_to_array(:'values', ',');
DO $$
DECLARE
value TEXT;
values TEXT[];
BEGIN
EXECUTE 'EXECUTE get_values' INTO values;
FOREACH value IN ARRAY values LOOP
raise notice 'v: %', value; …Run Code Online (Sandbox Code Playgroud) postgresql session-variables dynamic-sql psql postgresql-9.4
我是plpgsql的新手.我正在尝试使用plpgsql中的变量作为表名在plpgsql中运行一个简单的查询.但是变量被解释为表名而不是被解释为变量名的变量的值.
DECLARE
v_table text;
z_table text;
max_id bigint;
BEGIN
FOR v_table IN
SELECT table_name
FROM information_schema.tables
WHERE table_catalog = 'my_database'
AND table_schema = 'public'
AND table_name not like 'z_%'
LOOP
z_table := 'z_' || v_table;
SELECT max(id) from z_table INTO max_id;
DELETE FROM v_table where id > max_id;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
一些背景资料.对于我的数据库中的每个表,我有另一个以"z_"开头的表.例如,对于一个名为"employee"的表,我有一个名为"z_employee"的相同表.z_employee包含与员工相同的数据集.我在每次测试开始时使用它来恢复employee表.
当我运行此函数时,我收到以下错误:
ERROR: relation "z_table" does not exist
LINE 1: SELECT max(id) from z_table
Run Code Online (Sandbox Code Playgroud)
我的猜测是我不允许z_table在SQL查询中使用该变量.至少不是我在这里使用它的方式.但我不知道它应该如何完成.
我有一个存储在variable其中的SQL字符串并正在执行它exec()
Declare @sql varchar(max)
set @sql = Concat('select...',@var,'..') -- large string
exec (@sql)
Run Code Online (Sandbox Code Playgroud)
但我得到错误说
sometext附近的语法不正确
这是因为变量@sql不能保存整个字符串.所以我修改了将字符串拆分为两个不同的变量并执行它
Declare @sql1 varchar(max),@sql2 varchar(max)
set @sql1 = 'select...'
set @sql2 = ' from sometable join....'
exec (@sql1+@sql2)
Run Code Online (Sandbox Code Playgroud)
我检查了数据长度 @sql1+ @sql2
Select Datalength(@sql1+ @sql2)
Run Code Online (Sandbox Code Playgroud)
它回来了 14677
现在的问题是为什么varchar(max)不能存储14677信息字节?当文件说它可以存储2GB数据时
我们应该使用连接运算符||还是format()触发函数中的函数?
使用其中一种相对于另一种是否有任何优势,或者是否取决于个人喜好和可读性?
您是否会说对于简单的串联,使用运算符,但对于更复杂的串联,使用格式函数?
dynamic-sql ×10
sql ×6
postgresql ×5
sql-server ×3
t-sql ×2
ado.net ×1
c# ×1
database ×1
linq ×1
oracle ×1
plpgsql ×1
psql ×1
r ×1
select ×1
sql-update ×1
varcharmax ×1