为什么oracle认为这个查询格式不正确?(Why oracle thinks this query is malformed?)
我将以下sql发送到oracle db,并获取
ORA-00907: missing right parenthesis
。SELECT "LOGS"."ID", "LOGS"."USER_ID", "LOGS"."TIMESTAMP", "LOGS"."SESSION_ID" FROM "LOGS" INNER JOIN "USERS" ON ("LOGS"."USER_ID" = "USERS"."USER_ID") WHERE ("USERS"."USERNAME" IS NOT NULL AND "LOGS"."TIMESTAMP" <= TO_TIMESTAMP(2013-03-26 23:59:59, 'YYYY-MM-DD HH24:MI:SS.FF') AND "LOGS"."TIMESTAMP" >= TO_TIMESTAMP(2013-03-26 00:00:00, 'YYYY-MM-DD HH24:MI:SS.FF') )
这个问题的原因是什么?
I'm sending the following sql to oracle db, and getting
ORA-00907: missing right parenthesis
.SELECT "LOGS"."ID", "LOGS"."USER_ID", "LOGS"."TIMESTAMP", "LOGS"."SESSION_ID" FROM "LOGS" INNER JOIN "USERS" ON ("LOGS"."USER_ID" = "USERS"."USER_ID") WHERE ("USERS"."USERNAME" IS NOT NULL AND "LOGS"."TIMESTAMP" <= TO_TIMESTAMP(2013-03-26 23:59:59, 'YYYY-MM-DD HH24:MI:SS.FF') AND "LOGS"."TIMESTAMP" >= TO_TIMESTAMP(2013-03-26 00:00:00, 'YYYY-MM-DD HH24:MI:SS.FF') )
What can be the cause of this problem?
原文:
更新时间:2021-10-14 10:10
最满意答案
是的,有一个名为
__gc
的metamethod专门用于此目的。 有关更多详细信息,请参见第29章 - 管理 Lua中的编程 资源 (PIL) 。以下代码段创建了一个metatable并注册了
__gc
元方法回调:luaL_newmetatable(L, "SomeClass"); lua_pushcfunction(L, some_class_gc_callback); lua_setfield(L, -2, "__gc");
Yes, there is a metamethod called
__gc
specifically for this purpose. See Chapter 29 - Managing Resources of Programming in Lua (PIL) for more details.The following snippet creates a metatable and registers a
__gc
metamethod callback:luaL_newmetatable(L, "SomeClass"); lua_pushcfunction(L, some_class_gc_callback); lua_setfield(L, -2, "__gc");
相关问答
更多-
你在谈论两件完全不同的事情。 一旦using块结束,该对象将被丢弃。 这并没有说什么时候它是垃圾收集。 堆内存释放的唯一时间是发生垃圾回收 - 这只发生在内存压力下(除非明确使用GC.Collect )。 处理对象仅仅意味着调用它的Dispose方法。 这通常意味着释放稀缺资源或本地资源(实际上,所有稀缺资源都是本地资源 - 套接字,文件等)。 现在,您的案例中可丢弃对象的生命周期在范围上是有限的,因此理论上可以在using块结束后立即收集它 - 但是,这在实践中并不真正发生,因为.NET运行时尽量避免收藏 ...
-
Lua中的析构函数?(Destructors in Lua?)[2022-11-19]
从metatables文档 : 元表可以控制对象在算术运算,命令比较,连接,长度操作和索引中的表现。 metatable还可以定义在用户数据被垃圾收集时调用的函数。 Lua用户的Lua FAQ指出: 为什么__gc和__len元方法不能在表格上工作? 用户数据对象通常需要一些显式的析构函数来在对象即将被删除时运行,而Lua为此提供了__gc元方法。 但是,为了提高效率,这在表格中是不允许的。 通常,不需要在表上设置析构函数,因为表将自动删除,并且表中包含的任何引用都将被正常地垃圾收集。 可能的解决方法是创建 ... -
为什么shared_ptr没有虚拟析构函数?(Why doesn't shared_ptr have a virtual descructor? (and how can I get around this?))[2023-01-15]
它已经内置了这种能力,而不需要让人们从中获取危险的东西: #include#include /* * Done as a function for simplicity. * But this can be done in so many ways */ void MyCleanup(int* x) { std::cout << "DONE\n"; delete x; } int main() { boo ... -
实体框架将从数据库中检索的所有实体保留在上下文中,以便在迭代后不会收集它们。 这样做是为了跟踪变化。 您可以在执行前通过调用AsNoTracking来禁用此功能( docs )。 这样做SaveChanges将不会持久保存对这些实体所做的任何更改。 至于关于天气的问题,在每次迭代后释放对象,答案是肯定的。 我创建了一个简单的演示,通过在构造函数和析构函数中添加日志代码并添加显式GC调用来说明这一点。 每次迭代后都会调用析构函数。 public class Program { public stati ...
-
Lua类对象?(Lua class objects?)[2022-06-14]
Lua是面向对象的,但它不像Java / C ++ / C#/ Ruby等,没有本机类 ,创建新对象的唯一方法是克隆现有对象。 这就是为什么它被称为原型语言 (如JavaScript)。 阅读Lua第16章中的编程 。 您可以使用metatable模拟正常的OOP。 Lua is object oriented, but it's not like Java/C++/C#/Ruby, etc, there's no native class, the only way to create new objec ... -
在一般情况下,无法测试对象是否被丢弃。 WeakReference可能是您正在寻找的东西。 您可以在测试过程中创建WeakReference,并在代码运行之后: WeakReference wr = new WeakReference(obj); GC.Collect(); Assert.IsTrue(!wr.IsAlive); There is no way to test if object is disposed in general case. WeakReference is probably ...
-
在lua 5.1中,使用__gc元方法的唯一lua值是userdata 。 当然,任何黑客或解决方法都必须涉及用户数据。 通常情况下,没有办法从lua端创建newuserdata,但是有一个“ 隐藏的 ”未记录的函数newproxy就是这样做的。 newproxy采用可选的bool或userdata参数。 如果你传入true那么你会得到一个附带了新metatable的userdata。 如果传入另一个用户数据,则新的用户数据将被分配与传入的相同的元数据。 所以现在你可以将一个能使__gc工作的函数组合在一起 ...
-
lua_setmetatable不会从堆栈中删除对象,因此存在对userdata对象的引用。 所以Lua不会收集它。 lua_setmetatable does not remove object from stack so there exists reference to your userdata object. So Lua will not collect it.
-
Lua内存在C进程中泄漏(Lua memory leak in C process)[2022-07-08]
Lua通过调用提供的释放函数忠实地释放不可到达的对象(默认情况下为realloc(block, 0) )。 看起来libc分配器正在努力返回未使用的内存,可能是由于高度碎片。 查看strace输出(我在64位Debian 6上使用Lua 5.1.4大致相同的数字),C运行时选择使用小增量的brk进行分配,但是不进行释放(调用具有较低值的brk )。 但是,如果在进入无限循环之前插入malloc_trim(M_TOP_PAD) ,您将在top输出中看到驻留大小急剧下降到~5M并且strace显示数据段确实已经 ... -
是的,有一个名为__gc的metamethod专门用于此目的。 有关更多详细信息,请参见第29章 - 管理 Lua中的编程 资源 (PIL) 。 以下代码段创建了一个metatable并注册了__gc元方法回调: luaL_newmetatable(L, "SomeClass"); lua_pushcfunction(L, some_class_gc_callback); lua_setfield(L, -2, "__gc"); Yes, there is a metamethod call ...