好的,所以我是oracle的完整新手.现在已经不在了;
我想你可以理解我下面要做的事情.对于找到的每个存储过程,将DDL输出到带有其名称的文件名.
问题是我无法弄清楚如何让假脱机目标获取由光标设置的FileName的值.
DECLARE
objName varchar2(50);
FileName varchar2(50);
cursor curProcs is
select OBJECT_NAME into objName
FROM ALL_PROCEDURES WHERE OWNER = 'AMS'
ORDER BY OBJECT_NAME; -- get all procs in db
BEGIN
open curProcs;
if curProcs%ISOPEN THEN
LOOP
FETCH curProcs into objName;
EXIT WHEN curProcs%NOTFOUND;
FileName := 'C:\ ' || objName || '.PRC.SQL';
spool FileName; --BREAKS
DBMS_METADATA.GET_DDL('PROCEDURE',objName);
spool off;
END LOOP;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
关于我哪里出错的任何想法?如果有人有这方面的例子,我会非常感激.
我觉得我必须在它周围跳舞,因为如果我最初创建一个列
spool &ColName
Run Code Online (Sandbox Code Playgroud)
我得到一个结果,我似乎无法动态地改变那个&colname
谢谢你的帮助.
如果在其他地方回答了这个问题,我们深表歉意。我不断收到错误消息 XQuery [Mytable.XMLData.nodes()]: There is no element named 'Answer'
SELECT
ref.value('/','nvarchar(1000)')
FROM Mytable CROSS APPLY xmldata.nodes('Answer') R(ref)
Run Code Online (Sandbox Code Playgroud)
——
--XML of Row
<Answer xmlns="http://TempNameSpace.com/AnswerData.xsd" Type="Deliverable">
<Deliverable>
<Title>test</Title>
<Description>test</Description>
<DueDate>2010-02-16T08:59:59</DueDate>
</Deliverable>
</Answer>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种不同的变体来获取根节点(“答案”)或任何子节点,如果,但是我将语句更改为
SELECT
ref.value('/','nvarchar(1000)')
FROM Mytable CROSS APPLY xmldata.nodes('/') R(ref)
Run Code Online (Sandbox Code Playgroud)
我得到结果 testtest2010-02-16T08:59:59
我最终会喜欢表格格式的数据,比如
SELECT
ref.value('/Title','nvarchar(1000)') as Title
ref.value('/Description','nvarchar(1000)') as Description
etc..
FROM Mytable CROSS APPLY xmldata.nodes('/Deliverable') R(ref)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
在.Net中使用Regex
我将有一组这样的数据
< Bunch o' Data Here >
Run Code Online (Sandbox Code Playgroud)
其中<只是新记录的指标,是记录>的结尾.
这些记录可能会像这样
< Dataset 1><Dataset 2 broken, no closing tag <dataset 3>
Run Code Online (Sandbox Code Playgroud)
他们也可以进来
< Dataset 1>Dataset 2 broken, no opening tag ><dataset 3>
Run Code Online (Sandbox Code Playgroud)
虽然,我不确定后一种情况是否可能,但是当我不得不跨过这座桥时.
我正在尝试使用Regex将这些分成基于这个开始和结束字符的记录,最终是这样的
Match 1 = < Dataset 1>
Match 2 = <Dataset 2 broken, no closing tag
Match 3 = <Dataset 3>
Run Code Online (Sandbox Code Playgroud)
我试图找出非捕获组如何工作,也许我的理解是错误的.
<.*?(?:<|>)
Run Code Online (Sandbox Code Playgroud)
让我觉得非常接近我认为,除了它包括第三组数据的开头特征与第二组的捕获.我也怀疑它?:没有做它需要的东西,如果它取出它,它返回相同的匹配集(2).
我有一个安装了MSI安装程序的Windows服务.我试图让这个安装程序充当"更新程序",首先让它自己卸载(RemovePreviousVersions = true?),然后重新安装.我理解的方式是,使用RemovePreviousVersions = true,当安装程序第二次运行时,它应该注意到产品的当前版本与已安装的版本不同,它将对已安装的产品执行卸载操作,然后执行在新版本上安装操作.然而,情况似乎并非如此.看来初始卸载步骤永远不会发生,安装程序只是尝试执行安装.这导致了我的问题,因为安装程序自定义操作是服务安装,当然,该服务已经安装,然后抱怨"服务已存在".
如何让Windows安装程序首先卸载然后安装服务?也许我对MSI安装程序如何工作有所了解?有没有更好的方法来安装服务?
我已经开始了,一个相当复杂的存储过程开始归结为一个非常简单的用例,似乎没有像我期望的那样工作.
现在,对于我的测试,存储过程看起来像这样:
CREATE OR REPLACE PROCEDURE proc_test(
v_someString varchar2
) as
BEGIN
dbms_output.put_line('test');
END;
Run Code Online (Sandbox Code Playgroud)
我可以使用可调用语句API从java调用此存储过程
java.sql.CallableStatement stmt = conn.prepareCall("call proc_test(?)");
stmt.setObject(1,null);
stmt.execute();
Run Code Online (Sandbox Code Playgroud)
以上作品已经过了.该方法执行并成功完成.现在它变得棘手.我们已经创建了一组oracle对象类型,以允许我们传递更复杂的结构,类似于以下内容
CREATE OR REPLACE
type SOMETYPE_TYPE force UNDER BASE_TYPE (value varchar2(255),
CONSTRUCTOR FUNCTION SOMETYPE_TYPE RETURN SELF AS RESULT) NOT FINAL;
Run Code Online (Sandbox Code Playgroud)
如果我只是将程序更改为接受这些类型作为参数,如下所示:
CREATE OR REPLACE PROCEDURE proc_test(
v_someString SOMETYPE_TYPE
) as
BEGIN
dbms_output.put_line('test');
END;
Run Code Online (Sandbox Code Playgroud)
甲骨文将打破 PLS-00306: wrong number or types of arguments in call to 'CNV_CREATE_PERSON'
是什么赋予了?如果我从另一个以null为值的过程调用此过程,它可以正常工作.只从java API调用它才会中断.
我一直在搜索任何解决方案的文档,但找不到.也许你们中的一位聪明才智的学者可以指出我正确的方向.
谢谢
使用MSSQL 2008和XQUERY
考虑存储在表中的以下XML:
<ROOT>
<WrapperElement>
<ParentElement ID=1>
<Title>parent1</Title>
<Description />
<ChildElement ID="6">
<Title>Child 4</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement ID="0">
<Title>Child1</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement ID="8">
<Title>Child6</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
</ParentElement>
</WrapperElement>
</Root>
Run Code Online (Sandbox Code Playgroud)
我想将这个xml分解成类似的东西
PE!ID | PE!Title | PE!Description | CE!ID | CE!Title | CE!StartDate |...
1 | parent1 | | 6 | child 4 | 2010-... |
1 | parent1 | | 0 | child1 | 2010-... |
Run Code Online (Sandbox Code Playgroud)
等等
注意:在此示例中,每个ParentElement可能有许多ChildElements.我一直在尝试使用xquery,但是我无法浏览复杂的元素.
基本上,我正在尝试与FOR XML对表所做的完全相反,只是使用更简单的数据集来处理.
关于下一步该怎么做或如何实现这一点的任何想法?
谢谢
基本上我正在尝试将以下mssql查询重现为LINQ
SELECT DISTINCT [TABLENAME], [COLUMNNAME] FROM [DATATABLE]
Run Code Online (Sandbox Code Playgroud)
我最接近的是
Dim query = (From row As DataRow In ds.Tables("DATATABLE").Rows _
Select row("COLUMNNAME") ,row("TABLENAME").Distinct
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了错误
范围变量名称只能从没有参数的简单或限定名称推断.
我有点期待它返回一个集合,然后我可以迭代并为每个条目执行操作.也许是数据集合?
作为一个完整的LINQ newb,我不确定我缺少什么.我尝试过变种
Select new with { row("COLUMNNAME") ,row("TABLENAME")}
Run Code Online (Sandbox Code Playgroud)
得到:
匿名类型成员名称只能从不带参数的简单或限定名称推断.
为了解决这个问题,我试过了
Dim query = From r In ds.Tables("DATATABLE").AsEnumerable _
Select New String(1) {r("TABLENAME"), r("COLUMNNAME")} Distinct
Run Code Online (Sandbox Code Playgroud)
但它似乎没有正确地做出独特的事情.
此外,有没有人知道任何好的书籍/资源,以流利?
看起来在所有简单的情况下都会被问到和回答,不包括那个我遇到麻烦的情况.我尝试过使用递归CTE来生成这个; 但是光标会更好吗?或者也许一组递归函数可以解决这个问题?
这可以在cte中完成吗?
考虑下表
PrimaryKey ParentKey
1 NULL
2 1
3 6
4 7
5 2
6 1
7 NULL
Run Code Online (Sandbox Code Playgroud)
应该屈服
PK
1
-2
--5
-6
--3
7
-4
Run Code Online (Sandbox Code Playgroud)
其中 - 标记的数量等于深度,我的主要难点是排序.
我有一系列自定义对象.例如,我希望能够通过特定的数据成员引用此数组myArrary["Item1"]
"Item1"实际上是存储在此自定义类型的Name属性中的值,我可以编写谓词来标记相应的数组项.但是我不清楚如何让数组知道我想使用这个谓词来查找数组项.
我想对这个数组使用字典或散列表或NameValuePair,并解决这个问题,但是它已经生成并且必须保持为CustomObj[].我也试图避免从这个数组加载一个字典,因为它会多次发生,并且可能有很多对象.
为了澄清
myArray[5] = new CustomObj() // easy!
myArray["ItemName"] = new CustomObj(); // how to do this?
Run Code Online (Sandbox Code Playgroud)
以上可以做到吗?我真的只是在寻找类似于DataRow.Columns["MyColumnName"]工作方式的东西
感谢您的建议.