我有一个clob变量,需要将它分配给varchar2变量.clob var中的数据小于4000(i..e varchar2的maxsize)oracle10 +
我试过了
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1 ));
report_clob := null;
Run Code Online (Sandbox Code Playgroud)
但它会将报告转换为长值,我在调试时会看到它.当我从我的C#代码调用这个sql(proc)时.它抱怨说缓冲区太小,因为我按照varchar发送参数,但上面的转换可能会把它变成long值.
我甚至尝试过直接任务
report_clob := report
Run Code Online (Sandbox Code Playgroud)
获得相同的结果.
编辑
好的,要回答以下问题,请参阅:我在PL/SQL开发人员中使用测试脚本进行调试.报告变量是varchar2(4000).当我走后第二行.报告显示为一个很长的值,它只是说(长期价值).甚至看不到内容.
report和report_clob是程序中的变量.从C#代码调用此过程.
调用此过程时,C#中的异常字符串缓冲区太小.我已经在C#中给出了5000作为报告变量的大小,足以从过程中接收4000个最大字符值.所以我猜问题并不在于此.
当我分配report:='some string ....'时,C#call工作正常.
所以我的调查说报告:= transform(report_clob)正在使报告成为长值或某些这样的东西(怪异的)使得C#代码在5000 varchar out参数中处理更大的值时会出现问题.
我很乐意提供更多细节.
我有以下数据访问层(DAL).我想知道它是否设置正确,或者我是否需要改进它?
public class User
{
}
//Persistence methods
static class UserDataAccess
{
UsersDAL udal = // Choose SQL or FileSystem DAL impl.
InsertUser(User u)
{
// Custom logic , is 'u' valid etc.
udal.Insert(u);
}
}
abstract class UsersDAL
{
GetUserByID();
InsertUser(u);
...
}
// implementaitons of DAL
static class UsersSQLStore : UsersDAL
{
}
static class UsersFileSystemStore : UsersDAL
{
}
Run Code Online (Sandbox Code Playgroud)
我将存储层与User类分开,以访问方法集合,进一步调用任何自定义DAL.
是使用static在DAL执行是否正确?
请建议更正或我可以做得更好的方法.我在分层编写代码方面没有太多经验.
我们有一个来自另一个项目的.NET程序集,其中一个来自Reflector的生成文件有一个方法的代码片段.
现在VS 2010 c#编译器抛出各种编译错误$$意外.关闭括号等
在ILDASM中,我看到了这个方法以及许多其他提到的方法,但是在生成的代码中,我发现只有这些编译器生成的方法中的一个进入.
怎么去编译?
阅读ValueTypes - RefTypes - EricLippert后我有3个问题:
因为说'int'派生自System.ValueType,派生自System.Object,
那么'int'这样的值类型确实占用了多少空间(看到它最终来自System.Object)?它只是int的大小或用于区分它是值类型的额外CLR簿记字段.
'int'和'object'之间的大小差异?
当'int'用包装器装箱时.那么包装器只是一个对象类型(并且该对象进入堆)的情况呢?这个包装器对象和普通新对象()之间的区别?包装器的大小/空间是多少?
我有一个WCF服务,它公开了一个Generic接口(该服务有一个实现这个接口的泛型类).
然后我尝试在托管控制台应用程序中托管此服务(仅用于测试目的).ThreadStart行导致错误,表示找不到T的类型.
现在我不能通过Main <T>(string [] args)来制作Main泛型,其中T:IComparable <T>因为它说,主要入口点未找到.
我的问题是如何处理这个案子一般?
// Service Hosting app
static void Main(string[] args)
{
new Thread(new ThreadStart(StartBSTService<T>)).Start();
}
static void StartBSTService<T>() where T : IComparable<T>
{
string baseAddress = "http://localhost:8080/bst";
StartAService(typeof(BSTService<T>), baseAddress);
}
Run Code Online (Sandbox Code Playgroud)
编辑:也添加服务类
[ServiceContract(Namespace = "http://Microsoft.Samples.GettingStarted")]
public interface IBSTService<T> where T : IComparable<T> //: ICollection<T>
{
[OperationContract]
void Add(T toAdd);
// For brevity, not providing all other methods
// but they are similar IColleciton methods.
}
public class BSTService<T> : IBSTService<T> where T : IComparable<T>
{ …Run Code Online (Sandbox Code Playgroud) 我们有一个大约20列的表,如下所示:
我们需要插入1000条记录,稍后再选择也会产生大约1000条记录.
尝试以两种方式完成插入:
两种情况下的插入都需要30秒以上.我们甚至尝试在干净的桌子上做这件事.怎么加速呢?
[对于普通的10列表,我们已经通过parallel.for在大约60秒内完成了200万条记录插入.]
选择(从SQL mgmt studio测试)返回2000条记录也需要超过30秒,即使在干净的表格中也是如此.
时间可变:
可变大小或上限固定大小会在列中产生很大差异VARCHAR(SIZE)吗?
[磁盘速度很快(RAID?不确定)并专用于此数据库]
表模式:(没有PK)
varchar(50)
varchar(2)
smallint
varchar(2048)
int
int
varchar(2048)
varchar(MAX)
varchar(MAX)
varchar(MAX)
smallint
varchar(500)
varchar(500)
varchar(MAX)
smallint
smallint
bigint
bigint
bigint
varchar(2048)
smallint
varchar(MAX)
varchar(MAX)
varchar(2048)
datetime
Run Code Online (Sandbox Code Playgroud)
指数:
索引在varchar(50)上,非唯一非群集
SELECT语句:
select *
from table
where varchar(50) = 'value1'
and varchar(2) = 'value2'
and smallint = 'value3'
Run Code Online (Sandbox Code Playgroud)
每个组合varchar(50)都有5个唯一varchar(2)条目,每个条目有varchar(2)1-3 smallint个条目.
我有表,seq,触发器,sp,类型,oracle队列等.
我想知道什么应该理想地构成一个包的一部分,什么应该在外面.表可以成为包的一部分吗?
一般的做法如何?及其好处.
我理解包的行为的主要思想,如库或命名空间.我在SQL IDE中管理的一个好处是,您可以轻松地删除并重新创建并轻松查看和管理在一个软件包下发生的问题.
别的什么?