是否有(大致)SQL或类XQuery语言来查询JSON?
我正在考虑非常小的数据集,这些数据集可以很好地映射到JSON,很容易回答诸如"X的所有值,其中Y> 3"的查询,或者执行通常的SUM/COUNT类型操作.
作为完全构成的例子,这样的事情:
[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]
SUM(X) WHERE Y > 0 (would equate to 7)
LIST(X) WHERE Y > 0 (would equate to [3,4])
Run Code Online (Sandbox Code Playgroud)
我认为这可以在客户端和服务器端工作,结果转换为适当的特定于语言的数据结构(或者可能保存为JSON)
一个快速的谷歌搜索表明人们已经考虑过它并实现了一些东西(JAQL),但似乎还没有出现标准用法或一组库.虽然每个功能都可以自行实现,但如果有人已经做好了,我不想重新发明轮子.
有什么建议?
编辑:这可能确实是一个坏主意,或者JSON可能过于通用我正在思考的格式..想要查询语言而不是直接根据需要直接执行求和/等功能的原因是我希望构建查询动态地基于用户输入.有点像"我们不需要SQL,我们只能编写我们需要的功能"的论点.最终要么失控,要么在你进一步推动时最终编写自己的SQL版本.(好吧,我知道这是一个有点愚蠢的论点,但你明白了......)
我在My sql Stored过程中生成一个动态查询.我想把这个查询的结果变成一个out参数.这该怎么做 ?
CREATE PROCEDURE 'searchInvoice'
(
OUT numOfRecords INT
)
BEGIN
DECLARE query1 TEXT;
DECLARE query2 TEXT;
SET query1 = 'SELECT COUNT(*) bla bla bla.....';
// Query1 to select the count of matching tuples..
SET query2 = 'SELECT * from bla bla bla....';
// Query2 to select original records...
// later part of this both queries generate dynamically according to some IN parameters..
// now I wanna assign the output of the query1 into numOfRecords
// and I …Run Code Online (Sandbox Code Playgroud) 我有这样的代码:
//build query
var shops = (from p in dataContext.shops
let distance = dataContext.GetDistance(p.lat, p.lon, nearlat,nearlon)
join c in dataContext.shops_category on p.id equals c.poi_id
select new ShopsModel { p = p, distance = distance }
);
}
//add dynamic orderby
if(somthig)
shops.OrderBy(distance)
else
shops.OrderBy(p.name)
//get records.
return shop.Take(30).ToList()
Run Code Online (Sandbox Code Playgroud)
它除了OrderBy之外还可以正常工作.生成的SQL代码不包含orderby子句,并且不对记录进行排序.
任何的想法?感谢帮助.
是否有像Spring Data MongoDB存储库的JPA规范?
如果没有,我如何使用存储库进行动态查询?
经典场景可以是具有用户将填充的可选字段的搜索表单.
spring dynamic-queries dynamicquery spring-data spring-data-mongodb
我已经找到了我要在Oracle和SQL Server上解决的问题的解决方案(我认为),但是似乎无法将其转换为Postgres解决方案。我正在使用Postgres 9.3.6。
这个想法是为了生成用于分析目的的有关表内容的“元数据”。这只能通过让每一列都运行查询来找出(例如...)最小/最大/计数值等来完成(AFAIK)。为了使过程自动化,最好让数据库生成查询,然后执行查询。
使用示例salesdata表,我可以使用以下代码段为每列生成一个选择查询,并返回min()值:
SELECT 'SELECT min('||column_name||') as minval_'||column_name||' from salesdata '
FROM information_schema.columns
WHERE table_name = 'salesdata'
Run Code Online (Sandbox Code Playgroud)
优点是,无论列数如何,数据库都会生成代码。现在,我想到了无数个地方来存储这些查询,这些查询可以是某种变量,也可以是表列,其想法是执行这些查询。我想将生成的查询存储在变量中,然后使用EXECUTE(或EXECUTE IMMEDIATE)语句执行它们,这是此处采用的方法(请参见右窗格),但是Postgres不会让我在函数外部声明变量,因此我一直在抓挠我对如何将它们组合在一起,无论是什至是遵循的方向,也许还有更简单的东西。
您有任何指点吗,由于其他问题,我目前正在尝试类似的方法,但不知道我是否朝着正确的方向前进:
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$$
DECLARE
dyn_sql text;
BEGIN
dyn_sql := SELECT 'SELECT min('||column_name||') from salesdata'
FROM information_schema.columns
WHERE table_name = 'salesdata';
execute dyn_sql
END
$$ LANGUAGE PLPGSQL;
Run Code Online (Sandbox Code Playgroud) postgresql dynamic-sql plpgsql aggregate-functions dynamic-queries
我没有在文档中看到任何与我的问题有关的内容,在部署它时,我的应用程序运行不正常(更多内容在一秒内).我想做点什么
<select id="getLookupRows" parameterType="map" resultMap="lookupMap">
select id, name, active, valid
from #{table}
</select>
Run Code Online (Sandbox Code Playgroud)
在MyBatis.我有许多具有共享列的查找表,因此视图级别的用户确定最终使用哪个查找表.我尝试执行getLookupRows时得到的错误是
Cause: org.apache.ibatis.executor.ExecutorException: There was no TypeHandler found for parameter table of statement info.pureshasta.mapper.LookupMapper.getLookupRows
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:77)
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:69)
org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:85)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:65)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
$Proxy15.getLookupRows(Unknown Source)
info.pureshasta.service.FieldTitleService.getLookupRows(FieldTitleService.java:33)
Run Code Online (Sandbox Code Playgroud)
我的mapper界面如下:
List<Lookup> getLookupRows(@Param("specificColumn") String specificColumn,
@Param("table") String table);
Run Code Online (Sandbox Code Playgroud)
所以我们知道我正在尝试将String传递给此查询,没什么特别的.我有专门的专栏,因为这将是我的下一个任务.实际上每个查找表的其中一列是唯一的,因此我必须调用相应的specificColumn,但如果我能使table参数和FROM子句工作,我会非常高兴.
SQL Server (2000/2005) 函数获取表名和字段名作为参数,并从函数内的动态查询返回结果。结果应该分配给一个Table变量,该变量将在存储过程中进一步使用。如何实现这一目标?
我收到错误消息:“只能从函数内部执行函数和扩展存储过程。”
Declare @Data as table (FieldValue varchar(100))
insert into @Data select * from MyFunction ('Person.Address','AddressID')
-- Function
Alter function MyFunction (
@TableName varchar(100), @FieldName varchar(100)
) returns @GetData table (
FieldValue varchar(100)
) as
begin
Declare @SQL varchar(250)
Set @SQL = 'Select '+@FieldName+ ' from '+ @TableName
Exec sp_executesql @SQL
return
end
Run Code Online (Sandbox Code Playgroud) 我的代码片段当前使用以下代码将数据提取到对象中:
SELECT ORDR_LIST(ORDER_NUMBER,ORDER_TYPE,ORDER_DATE,CLIENT_ID,CLIENT_NAME) BULK COLLECT INTO P_RESULTSET
FROM
(SELECT ORDER_NUMBER,
ORDER_TYPE,
ORDER_DATE,
CLIENT_ID,
CLIENT_NAME
FROM
(SELECT ORDER_NUMBER,
ORDER_TYPE,
TO_CHAR(ORDER_CREATED_DATE,'YYYY-MM-DD HH:MI:SS am') AS ORDER_DATE,
CUSTOMER_FIRST_NAME
||' '
||CUSTOMER_SURNAME AS C_NAME,
CLIENT_ID,
CLIENT_NAME
FROM CONNECT_CUSTOMER_TRANS
WHERE ORDER_TYPE =P_ORDER_TYPE
AND lower(CUSTOMER_SURNAME) =lower(P_LAST_NAME)
AND lower(CUSTOMER_FIRST_NAME)=lower(P_FIRST_NAME)
AND lower(CLIENT_ID) =lower(P_CLIENT_ID)
AND ORDER_CREATED_DATE BETWEEN P_FROM_DT AND P_TO_DT
)
WHERE C_NAME=I.CUS_NAME);
Run Code Online (Sandbox Code Playgroud)
现在我已经将select语句动态生成为变量var1.但是我无法在动态部分中实现它.
代码应如下所示:
SELECT ORDR_LIST(ORDER_NUMBER,ORDER_TYPE,ORDER_DATE,CLIENT_ID,CLIENT_NAME) BULK COLLECT INTO P_RESULTSET
FROM var1
Run Code Online (Sandbox Code Playgroud)
这将由执行立即运行.
sql ×2
.net ×1
dynamic-sql ×1
dynamicquery ×1
ibatis ×1
json ×1
linq ×1
mybatis ×1
mysql ×1
nosql ×1
oracle ×1
oracle11g ×1
plpgsql ×1
plsql ×1
postgresql ×1
querying ×1
spring ×1
spring-data ×1