我需要知道如何解析一个查询,以便在执行之前知道它是否构建良好.如果解析是正确的,那么执行它,如果不丢弃它.
我无法使用SET NOEXEC,SET PARSEONLY,TRY/CATCH完成此操作.
我在循环中使用动态sql.有时动态sql不正确,不是因为我的错,而是因为数据库中存在的信息.出于这个原因,我想在执行之前解析它.
我正在尝试让这个动态SQL运行(使用EXECUTE IMMEDIATE)
M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 from :m_var2 RETURNING MAX(:m_var1)+1 INTO :m_var3';
EXECUTE IMMEDIATE M_SQL_STATEMENT
USING M_COLUMN_NAME, UPPER(P_TABLE_NAME), M_COLUMN_NAME
RETURNING INTO M_SEQ_NUMBER;
Run Code Online (Sandbox Code Playgroud)
但是,在尝试运行时,我一直在努力
ORA-00903: Invalid table
Run Code Online (Sandbox Code Playgroud)
P_TABLE_NAME是一个表名,可以作为输入接受.我已确认表名和列名有效.我无法弄清楚为什么Oracle会抛出错误.
FWIW将SQL语句更改为
M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 SEQ from :m_var2 RETURNING SEQ INTO :m_var3';
Run Code Online (Sandbox Code Playgroud)
仍会导致相同的错误.
以下是plpgsql函数的一部分.问题是,结果source_geom并target_geom是character varying数据类型,因此我需要两个环绕source_geom,并target_geom在引号("").问题是在plpgsql语言中我怎么不知道我能做到.
这就是我现在所拥有的:
EXECUTE 'update ' || quote_ident(geom_table) ||
' SET source = ' || source_geom ||
', target = ' || target_geom ||
' WHERE ' || quote_ident(gid_cname) || ' = ' || _r.id;
Run Code Online (Sandbox Code Playgroud)
我遇到的错误如下:
ERROR: syntax error at or near "C03B9E3B66052D400DDEFC2BD0F24140"
LINE 1: ...pdate track_points SET source = 0101000020E6100000C03B9E3B66...
^
QUERY: update track_points SET source = 0101000020E6100000C03B9E3B66052D400DDEFC2BD0F24140, target = 0101000020E610000075690DEF83052D40F88E75CCD4F24140 WHERE ogc_fid = 2
CONTEXT: PL/pgSQL function "create_network" …Run Code Online (Sandbox Code Playgroud) 我不得不求助于ORM不足的原始SQL(使用Django 1.7).问题是大多数查询最终都有80-90%的相似性.在不违反可重用性的情况下,我无法找到构建查询的强大而安全的方法.
字符串连接是唯一的出路,即使用if-else条件构建无参数查询字符串,然后使用预准备语句安全地包含参数(以避免SQL注入).我想按照一种简单的方法来为我的项目模板化SQL,而不是重新发明一个迷你ORM.
例如,考虑以下查询:
SELECT id, name, team, rank_score
FROM
( SELECT id, name, team
ROW_NUMBER() OVER (PARTITION BY team
ORDER BY count_score DESC) AS rank_score
FROM
(SELECT id, name, team
COUNT(score) AS count_score
FROM people
INNER JOIN scores on (scores.people_id = people.id)
GROUP BY id, name, team
) AS count_table
) AS rank_table
WHERE rank_score < 3
Run Code Online (Sandbox Code Playgroud)
我怎么能够:
a)添加可选WHERE约束people 或
b)更改INNER JOIN为LEFT OUTER 或
c)更改COUNT为SUM 或
d)完全跳过该OVER …
我试图使用PostgreSQL截断模式中的所有表.它显示此错误:
ERROR: relation "Building" does not exist
CONTEXT: SQL statement "TRUNCATE TABLE "Building" CASCADE"
PL/pgSQL function truncate_schema(character varying) line 15 at EXECUTE statement
Run Code Online (Sandbox Code Playgroud)
这是我使用的功能:
CREATE OR REPLACE FUNCTION truncate_schema(schema IN VARCHAR) RETURNS void AS $$
DECLARE
statements CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_type = 'BASE TABLE' AND table_schema = schema;
BEGIN
FOR stmt IN statements LOOP
EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.table_name) || ' CASCADE';
END LOOP;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
怎么做得好?
我在PostgreSQL中有这个功能:
CREATE OR REPLACE FUNCTION func1(a integer, b timestamp, c integer[])
RETURNS SETOF typ_new AS
$BODY$
declare
begin
CREATE OR REPLACE VIEW newView as (select * from func2($1,$2,$3));
end;
$BODY$
LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)
func2也会返回,SETOF typ_new因此它们兼容.
运行时我收到一个错误:ERROR: there is no parameter $1
如果我更改$1为参数名称,a则错误更改为
ERROR: column "a" does not exist
我也尝试过动态SQL:
sqlstr ='CREATE OR REPLACE VIEW newView (columns... ) as
(select * from func2('||$1||','||$2||','||$3||'))';
execute sqlstr;
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为$3是integer[]和||不能使用数组.
我该如何解决这个问题?
我试图在Mybatis中创建一个通用SQL包含,它将应用给定特定值的比较器。想法是在多个映射器之间重用此sql代码段。我遇到的问题是在include内的if语句中使用字符串替换时。
当前,xml如下所示:
<select id="get" parameterType="ServiceModelQueryHelper" resultMap="ServiceRecordMap">
SELECT * from service
<if test="name.isApplicable()">
WHERE service.name
<include refid=comparatorMapper>
<property name="comparator" value="${name.comparator}"/>
<property name="value" value="${name.value}"/>
</include>
</if>
</select>
<sql id="comparatorMapper">
<if test="${comparator} == 'EQUALS'">
= ${value}
</if>
<if test="${comparator} == 'CONTAINS'">
~ ${value}
</if>
</sql>
Run Code Online (Sandbox Code Playgroud)
在测试内部使用$ {comparator}时,会在字符串替换发生之前评估OGNL表达式,从而导致ParseException,因为$不是有效的第一个字符。
有没有办法在OGNL表达式内引用sql片段的属性?
我有一张桌子Users,
????????????????????? ? Id ? Name ? Db ? ????????????????????? ? 1 ? Peter ? DB1 ? ? 2 ? John ? DB16 ? ? 3 ? Alex ? DB23 ? ?????????????????????
和许多具有相同结构的数据库(相同的表,相同的程序,......),所以每个数据库都有一个名为table的表Project,这就是Project表的结构,
?????????????????????????????? ? Id ? Request ? Information ? ?????????????????????????????? ? 1 ? 126 ? XB1 ? ? 2 ? 126 ? D6 ? ? 3 ? 202 ? BM-23 ? ??????????????????????????????
所以,当我查询数据库时:
SELECT count(distinct([Request])) as nbrRequests
FROM [SRV02].[DB1].[dbo].[Project]
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
??????????????? ? …
我有一个项目,其中前端JavaScript指定要排序的列的列表.
然后在后端我有多层应用程序.典型情况
请注意,System.Linq.DynamicDNX Core v5.0或.NET Platform v5.4不支持,因此我无法使用该库.
我在我的Things存储库中有以下实现:
public async Task<IEnumerable<Thing>> GetThingsAsync(IEnumerable<SortModel> sortModels)
{
var query = GetThingsQueryable(sortModels);
var things = await query.ToListAsync();
return things;
}
private IQueryable<Thing> GetThingsQueryable(IEnumerable<SortModel> sortModels)
{
var thingsQuery = _context.Things
.Include(t => t.Other)
.Where(t => t.Deleted == false);
// this is the problematic area as it does not return a valid queryable
string orderBySqlStatement = GetOrderBySqlStatement(sortModels);
thingsQuery = thingsQuery.FromSql(orderBySqlStatement);
return thingsQuery ;
}
/// this …Run Code Online (Sandbox Code Playgroud) linq dynamic-sql sql-order-by entity-framework-core asp.net-core
如何SELECT INTO在Postgres的PL / pgSQL函数内编写动态查询?
假设我有一个名为的变量tb_name,它填充在的FOR循环中information_schema.tables。现在,我有一个名为的变量tc,它将获取每个表的行数。我想要以下内容:
FOR tb_name in select table_name from information_schema.tables where table_schema='some_schema' and table_name like '%1%'
LOOP
EXECUTE FORMAT('select count(*) into' || tc 'from' || tb_name);
END LOOP
Run Code Online (Sandbox Code Playgroud)
应该是什么数据类型tb_name,并tc在这种情况下?
postgresql dynamic-sql plpgsql variable-assignment stored-functions
dynamic-sql ×10
postgresql ×6
plpgsql ×4
sql ×3
t-sql ×2
asp.net-core ×1
function ×1
java ×1
linq ×1
mybatis ×1
ognl ×1
oracle10g ×1
orm ×1
parsing ×1
plsql ×1
sql-order-by ×1
sql-server ×1