我想创建一个模板(通过SQL),可以直接复制到MS Excel中。
通常,这进行得很顺利,但是,我遇到了应该存储Excel公式的字段问题。根据用户在Excel工作表的某一列中的输入,应该使用此字段在Excel文件中创建INSERT语句。
这是我的代码:
SELECT
-- some other fields here
[...],
(SELECT '="INSERT INTO MyTable VALUES(" &C' || CREATE_INSERTS_TEMP_SEQ.nextval || '&",''THIS COLUMN IS TO BE FILLED BY USER IN EXCEL'',''"&D' || CREATE_INSERTS_TEMP_SEQ.currval || '&"'',14,sysdate);"' FROM DUAL) As SQL_Statement
FROM myTable;
Run Code Online (Sandbox Code Playgroud)
我收到错误消息ORA-02287: sequence number not allowed here。
为什么在我的子查询中不允许这样做?任何想法如何解决这个问题?
我必须有权访问这些值才能创建有效的Excel公式,因为这些数字是对各个Excel行的引用...
我正在通过Java创建多个XML文件,到目前为止一切正常,但是现在尝试创建带有命名空间前缀节点的文件时遇到了问题,例如,<tns:node> ... </tns:node>使用已经重构的代码版本适用于没有名称空间的普通xml文件。
被抛出的错误是:
org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: Ungültiges XML-Zeichen angegeben.
Run Code Online (Sandbox Code Playgroud)
抱歉,德国人说“指定了无效的XML符号”。
发生错误的代码行:
Element mainRootElement = doc.createElement("tns:cmds xmlns:tns=\"http://abc.de/x/y/z\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://abc.de/x/y/z xyzschema.xsd\"");
Run Code Online (Sandbox Code Playgroud)
为了消除错误导致转义较长的字符串或那些行中的某些内容的可能性,我也尝试仅使用Element mainRootElement = doc.createElement("tns:cmds");,但这会导致相同的错误。
这就是为什么我认为它与名称空间声明(即:用来完成名称空间)有关,因为这是我在该字符串中想到的唯一“无效”字符。
谁能确认这是问题的根源?如果是这样,是否有一个简单的解决方案?Java DOM可以完全使用命名空间标记吗?
编辑:整个方法供参考
private void generateScriptXML()
{
DocumentBuilderFactory icFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder icBuilder;
try
{
icBuilder = icFactory.newDocumentBuilder();
Document doc = icBuilder.newDocument();
Element mainRootElement = doc.createElement("tns:cmds xmlns:tns=\"http://abc.de/x/y/z\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://abc.de/x/y/z xyzschema.xsd\"");
doc.appendChild(mainRootElement);
mainRootElement.appendChild(getAttributes(doc,"xxx", "yyy", "zzz"));
mainRootElement.appendChild(getAttributes(doc,"aaa", "bbb", "ccc"));
mainRootElement.appendChild(getAttributes(doc,"ddd", "eee", "fff"));
...
...
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source …Run Code Online (Sandbox Code Playgroud) 我想删除某个查询返回的所有记录,但我找不到正确的方法来执行此操作。但是,我尝试DELETE FROM mytable WHERE EXISTS (subquery)删除表中的所有记录,而不仅仅是子查询选择的记录。
我的子查询如下所示:
SELECT
MAX(columnA) as columnA,
-- 50 other columns
FROM myTable
GROUP BY
-- the 50 other columns above
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
这应该很容易,但我的思绪现在被困住了。我很感谢任何建议。
编辑:columnA 不是唯一的(该表中也没有其他列是全局唯一的)