我有一种情况,我必须提交一部分代码作为自己的事务.
我创建了一个表subtransaction_tbl:
CREATE TABLE subtransaction_tbl
(
entryval integer
)
Run Code Online (Sandbox Code Playgroud)
和语言plpython3u中的函数:
CREATE FUNCTION subtransaction_nested_test_t() RETURNS void
AS $$
plpy.execute("INSERT INTO subtransaction_tbl VALUES (1)")
with plpy.subtransaction():
plpy.execute("INSERT INTO subtransaction_tbl VALUES (2)")
$$ LANGUAGE plpython3u;
Run Code Online (Sandbox Code Playgroud)
第一种情况:
BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select subtransaction_nested_test_t();
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
表中的条目是正确的:1,2,4
第二种情况:
BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select subtransaction_nested_test_t();
ROLLBACK TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
表中的值未填充
我预计1或2应该添加到表中,subtransaction_tbl但令我惊讶的是没有插入任何值.我想象一个新的子事务由函数打开,它不应该依赖于父事务.如果我是对的,请告诉我.
Postgres有自动交易吗?或者我是否必须修改我的plpython3u函数?
我将通过java 8中的lambda表达式
当我改变线程的代码它工作正常
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("run");
}
}).start();
Run Code Online (Sandbox Code Playgroud)
转换为lambda表达式为
new Thread(
() -> System.out.println("Hello from thread")
).start();
Run Code Online (Sandbox Code Playgroud)
但我无法转换FilenameFilter表达式
File file = new File("/home/text/xyz.txt");
file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
name.endsWith(".txt");
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
并且未成功转换为此
file.list(new FilenameFilter () {
(File a1, String a2) -> {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
它像日食一样给出错误
此行有多个标记
- 语法错误,插入";" 完成Statement
- 语法错误,插入"}"完成Block
- 语法错误,插入"AssignmentOperator Expression"完成赋值
我一直在研究从oracle数据库数据库生成xml的查询
其中"列"是一种类型
CREATE OR REPLACE TYPE "column" AS OBJECT
("coulmnname" VARCHAR2 (30), "datatype" VARCHAR2 (30))
Run Code Online (Sandbox Code Playgroud)
和col_list_t是类型
CREATE OR REPLACE TYPE col_list_t AS TABLE OF "column"
Run Code Online (Sandbox Code Playgroud)
和
SELECT CAST (
MULTISET (
SELECT "column" (B.COLUMN_NAME, B.DATA_TYPE)
FROM all_tab_columns b, all_tables c ,all_tables a
WHERE b.TABLE_NAME = a.TABLE_NAME
AND b.table_name = c.TABLE_NAME
AND B.OWNER = C.OWNER
AND c.OWNER = USER)AS col_list_t) from dual
Run Code Online (Sandbox Code Playgroud)
问题是这必须转换成postgres,因为CAST和MULTISET在postgres中是不可用的,所以有什么方法可以在postgres语法中做到这一点
我插入的查询格式为
to_date('25-JUN-13','DD-MON-RR')
Run Code Online (Sandbox Code Playgroud)
在oracle中工作正常,输出为25-JUN-13。
在postgresql中 ,与相同0001-06-25 BC。
这是一个从oracle数据库到postgresql的迁移项目。任何与oracle相同的解决方案。
如果我使用的是DD-MM-YY格式,则同样无法正常工作,那么结果会有很大不同。
在PostgreSQL中运行此查询->
select to_char(to_date('25-JUN-53','DD-MON-YY'),'YYYY') as YEAR
ANSWER IS --> 2053
Run Code Online (Sandbox Code Playgroud)
从查询中检索与oracle中相同的结果时
select to_char(to_date('25-JUN-53','DD-MON-RR'),'YYYY') as YEAR from dual
ASSWER IS --> 1953
Run Code Online (Sandbox Code Playgroud)
当我迁移项目时,Postgresql中应该具有相同的功能,以便最终结果应该相同。
我正在一个项目中工作,如下所示
if(null == object)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
是这样的
if(object == null){
// do something
}
Run Code Online (Sandbox Code Playgroud)
举一些例子,以便两者相同或不同.
我有一个带有NOCYCLE子句的Oracle查询,我必须将其翻译成Postgres:
SELECT FG_ID,CONNECT_BY_ROOT FG_ID as Parent_ID
FROM FG t
START WITH t.Parent_filter_group_id is null
CONNECT BY NOCYCLE PRIOR t.FILTER_GROUP_ID = t.PARENT_FILTER_GROUP_ID
Run Code Online (Sandbox Code Playgroud)
我已经在postgres中的connect_by_root等效问题和答案的帮助下转换了这个
如
with recursive fg_tree as (
select FG_ID,
FG_ID as fg
from FG
where Parent_filter_group_id is null
union all
select c.FG_ID,
p.fg
from FG c join fg_tree p on p.FG_ID = PARENT_FILTER_GROUP_ID
)
select * from fg_tree
order by FG_ID
Run Code Online (Sandbox Code Playgroud)
但是在这里没有子句,NOCYCLE如果父亲也是其中一个孩子,那么这个查询将返回错误.
postgresql ×4
oracle ×3
java ×2
sql ×2
casting ×1
connect-by ×1
datetime ×1
java-8 ×1
lambda ×1
multiset ×1
python-3.x ×1
transactions ×1
types ×1