我正在使用Oracle 11g标准版.
我想将用户正在执行的所有SQL查询记录到表中.
如何才能做到这一点?
好的,以下链接警告说讨论使用不受支持和未记录的apis.好吧,我试图以任何方式使用代码示例.它主要起作用.关于以下与例外有关的具体问题的任何想法?
http://msdn.microsoft.com/en-us/magazine/cc164086.aspx
仅供参考,我对原始样本做了改进.它维持着指向"previousfiber"的指针.相反,下面更新的示例使用"mainfiber"指针,该指针将传递给每个光纤类.这样,它们总能回到主纤维上.这允许主光纤处理所有其他光纤的调度.其他纤维总是"屈服"回主纤维.
发布此问题的原因与在光纤内抛出异常有关.根据文章,通过使用带有CreateLogicalThreadState(),SwitchOutLogicalThreadState()等的CorBindToRunTime API,框架将为每个光纤创建一个托管线程并正确处理异常.
但是,在所包含的代码示例中,它具有UUnit测试,该测试通过在光纤内抛出托管异常并在同一光纤内捕获它来进行实验.那柔软的作品.但是在通过记录消息处理它之后,堆栈似乎处于错误状态,因为如果光纤调用任何其他方法甚至是空方法,则整个应用程序崩溃.
这对我来说意味着SwitchOutLogicalThreadState()和SwitchInLogicalThreadState()可能没有正确使用,否则他们可能没有做好自己的工作.
注意:问题的一个线索是托管代码注销了Thread.CurrentThread.ManagedThreadId,并且每个光纤都是相同的.这表明CreateLogicalThreadState()方法并没有像宣传的那样真正创建新的托管线程.
为了更好地分析这个,我制作了一个伪代码列表,其中列出了用于处理光纤的低级API的顺序.请记住,光纤都在同一个线程上运行,因此没有任何同时发生的事情,这是一个线性逻辑.当然,必要的技巧是保存和恢复堆栈.这就是它似乎遇到麻烦的地方.
它最初只是一个线程,然后它转换为光纤:
现在第一次调用光纤,它的启动方法执行此操作:
最终纤维需要回到主纤维:
主光纤也将恢复预先存在的光纤:
以下是fibers.cpp,它包装了托管代码的光纤api.
#define _WIN32_WINNT 0x400
#using <mscorlib.dll>
#include <windows.h>
#include <mscoree.h>
#include <iostream>
using namespace std;
#if defined(Yield)
#undef Yield
#endif
#define CORHOST
namespace Fibers {
typedef System::Runtime::InteropServices::GCHandle GCHandle;
VOID CALLBACK unmanaged_fiberproc(PVOID pvoid);
__gc private struct StopFiber {};
enum FiberStateEnum {
FiberCreated, FiberRunning, FiberStopPending, FiberStopped
}; …Run Code Online (Sandbox Code Playgroud) create table foo(
id number,
status varchar2(10)
);
Run Code Online (Sandbox Code Playgroud)
表创建.
insert into foo values( 1, 'open' );
insert into foo values( 2, 'close' );
insert into foo values( 3, 'open' );
insert into foo values( 4, 'open' );
insert into foo values( 5, 'close' );
create type foo_obj is object (
id number,
status varchar2(10)
);
/
create type foo_nt
as table of foo_obj;
/
create or replace package test_bulk
is
procedure temp;
end;
/
create or replace package body test_bulk …Run Code Online (Sandbox Code Playgroud) 我是Android的初学者.我的朋友听过"霓虹灯".所以我做谷歌并找到了这个
参考它,Neon与Android OS或所有移动操作系统的多媒体有关,是吗?请再分享一下
我想插入字符长度超过10,000的大尺寸数据.我在每列中使用了CLOB数据类型.我无法插入/更新它在错误后显示的大数据:
ORA-01704: string literal too long
Run Code Online (Sandbox Code Playgroud)
我的代码
insert into table1 value(1,'values>10000');
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释一下执行计划和解释计划之间的区别.
当我执行
set autotrace traceonly;
select * from emp where empno=7369;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=1 Card=1 Bytes=38)
1 0 TABLE ACCESS BY INDEX ROWID SCOTT.EMP (Cost=1 Card=1 Bytes=38)
2 1 INDEX UNIQUE SCAN SCOTT.PK_EMP (Cost=0 Card=1)
Explain Plan
explain plan for select * from emp where empno=7369;
select * from table(dbms_xplan.display);
Plan hash value: 2949544139
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | …Run Code Online (Sandbox Code Playgroud) 我 在oracle中创建了一个存储过程:
PROCEDURE string_opp(input_string IN varchar2,output_string OUT varchar2)
Run Code Online (Sandbox Code Playgroud)
现在问题是如何执行此存储过程并检索输出参数.我已经在sql developer中执行了:
SET SERVEROUTPUT ON
DECLARE
outputString VARCHAR;
BEGIN
EXEC string_opp('input String',:outputString);
END;
Run Code Online (Sandbox Code Playgroud)
当我尝试这个我没有得到任何东西时,有人可以帮助我吗?
通过我的Android程序,我写了一个这样的文件:
String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/hello.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(str+"\n"); \\yeah string has a value there
writer.close();
Run Code Online (Sandbox Code Playgroud)
现在,当我进入Android的"Astro"文件浏览器时,我可以看到文件hello.txt,/mnt/sdcard/Files但是当我在Windows中安装sdcard时,我只能看到该文件夹中有4个其他文件而不是hello.txt.
在Windows本身,我甚至试图取消选中隐藏隐藏文件选项,以确保文件不被隐藏,但它只是不可见.
我甚至试图在SD卡的根目录中写入文件,但同样的问题.现在我很惊讶我怎么可能在Android中看到该文件而在Windows中却看不到.在Android中我甚至检查了文件内容,一切看起来都很好.
可能是什么问题呢?我写错文件的方式是什么?
PS:是的,android.permission.WRITE_EXTERNAL_STORAGE添加了Manifest权限.
当我在我的Intranet门户中打开一个页面时,我得到一个包含以下消息的窗口
FRM - 92095:Oracle JInitiator版本太低.请安装1.1.8.2或更高版本
我已经安装了JInitiator 1.1.8.16和JInitiator 1.3.1.30.但我收到相同的错误消息.
任何解决方案???