我有一个表负责存储日志.DDL是这样的:
CREATE TABLE LOG(
"ID_LOG" NUMBER(12,0) NOT NULL ENABLE,
"DATA" DATE NOT NULL ENABLE,
"OPERATOR_CODE" VARCHAR2(20 BYTE),
"STRUCTURE_CODE" VARCHAR2(20 BYTE),
CONSTRAINT "LOG_PK" PRIMARY KEY ("ID_LOG")
);
Run Code Online (Sandbox Code Playgroud)
有这两个指数:
CREATE INDEX STRUCTURE_CODE ON LOG ("OPERATOR_CODE");
CREATE INDEX LOG_01 ON LOG ("STRUCTURE_CODE", "DATA") ;
Run Code Online (Sandbox Code Playgroud)
但是这个查询产生了一个完整的表扫描:
SELECT log.data AS data1,
OPERATOR_CODE,
STRUCTURE_CODE
FROM log
WHERE data BETWEEN to_date('03/03/2008', 'DD-MM-YYYY')
AND to_date('08/03/2015', 'DD-MM-YYYY')
AND STRUCTURE_CODE = '1601';
Run Code Online (Sandbox Code Playgroud)
为什么我总是看到一个FULL TABLE SCAN列DATA和STRUCTURE_CODE?
(我也试过创建两个不同的索引STRUCTURE_CODE,DATA但我总是进行全表扫描)
这是包规范:
CREATE OR REPLACE PACKAGE employee_info
IS
PROCEDURE p;
FUNCTION f RETURN BOOLEAN;
END employee_info;
Run Code Online (Sandbox Code Playgroud)
这是包体:
CREATE OR REPLACE PACKAGE body employee_info
IS
PROCEDURE p IS
BEGIN
dbms_output.put_line('This is procedure');
dbms_output.put_line(chr(10));
END;
FUNCTION f RETURN BOOLEAN IS
BEGIN
dbms_output.put_line('This is function ');
dbms_output.put_line(chr(10));
RETURN true;
END;
BEGIN
dbms_output.put_line('This is the initialization section of package body');
END employee_info;
Run Code Online (Sandbox Code Playgroud)
我什么时候应该使用包的初始化部分?
如上例所示,当我第一次执行代码时,我只能看到package body的begin..end被执行,而其余的调用则不会执行.
我正在使用以下语句执行过程和函数:
execute employee_info.p;
declare
p1 boolean;
begin
p1 := employee_info.f;
end;
Run Code Online (Sandbox Code Playgroud) 我有一张表如下:
INS_SEQ | NAME | DATE
-----------------------------
1 | willy | 15/11/10
2 | zoe | 15/11/20
3 | willy | 15/11/20
4 | willy | 15/11/10
5 | willy | 15/11/21
6 | zoe | 15/11/17
7 | willy | 15/11/12
8 | zoe | 15/11/20
9 | zoe | 15/11/30
... and other values ...
Run Code Online (Sandbox Code Playgroud)
按列分组NAME返回:
INS_SEQ | NAME | DATE
----------------------------
1 | willy | 15/11/10
3 | willy | 15/11/20
4 | willy | …Run Code Online (Sandbox Code Playgroud) 环境:Windows 10,,Java 11.0.10Maven 3.8.1
有一个简单的批处理文件run.bat
mvn clean package
echo After build
Run Code Online (Sandbox Code Playgroud)
call run.bat从命令行执行时,我得到了 Maven 构建的完整输出,但该行After build永远不会打印到控制台。输出的最后一行是Process finished with exit code N(N=0如果构建成功,N=1否则)。
一种可能性是使用start在单独的进程中运行maven,但问题是需要顺序执行:
mvn clean package
command X // depends on the previous command artifact
Run Code Online (Sandbox Code Playgroud)
假设 Maven 在内部调用,我不确定如何实现这一点exit。
有没有办法mvn在同一脚本中与其他命令一起按顺序执行命令?
我想知道用户是否拥有对象的权限。
我正在研究 SQL Developer。
当我手动查询表DBA_TAB_PRIVS 时,我得到了所有需要的信息。
但是,我需要在某些触发器和函数中使用这些信息。
因此,我正在编写 PL/SQL 函数,如果角色具有特权,则返回 1,否则返回 0。
CREATE OR REPLACE FUNCTION HAS_PRIVILEGE_ON_OBJECT(rolename IN VARCHAR2,
objectname IN VARCHAR2,
objectowner IN VARCHAR2,
privilegename IN VARCHAR2)
RETURN NUMBER
AS
output NUMBER;
BEGIN
SELECT count(*) INTO output
FROM dba_tab_privs
WHERE grantee = rolename
AND owner = objectowner
AND table_name = objectname
AND privilege = privilegename;
IF output > 0 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END has_privilege_on_object;
Run Code Online (Sandbox Code Playgroud)
该函数不编译并说:
ORA 942:表或视图不存在。
连接的用户可以访问视图 DBA_TAB_PRIVS,因为我可以查询它,但是在尝试使用函数自动化它时。它不起作用。
请问有什么想法吗?
有一个具有标准 Maven 文件夹结构的简单 Java 项目。
src
main
java
mypackage
Main.java
resource
abc
cde.txt
Run Code Online (Sandbox Code Playgroud)
Main.java(省略样板)
var path = "abc/cde.txt";
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
if (input == null) {
throw new IllegalStateException("Resource not found");
} else {
// read from input
}
Run Code Online (Sandbox Code Playgroud)
该代码工作正常并从绝对路径
"%project_root%/target/classes/abc/cde.txt"(编译后的代码)读取文件。
添加文件后src/main/java/module-info.java情况发生变化:程序找不到文件并抛出in branch (input == null)。
如何以旧方式从“资源”文件夹中读取文件并同时拥有:资源文件夹中的java模块和资源?我想避免"src/main/resources"到处添加前缀。
我正在将一个员工编号传递给一个函数并返回加入日期.
我希望在找不到匹配的记录时返回NULL; 在我的情况下,它只是返回空白或空行;
get_join_date(in_emp_no)
CREATE OR REPLACE FUNCTION get_join_date(in_emp_no) RETURN DATE IS
v_join_date DATE;
BEGIN
SELECT joined_date
INTO v_date
FROM employee
WHERE employee_number = in_emp_no
AND type = in_type;
IF v_join_date IS NOT NULL THEN
v_join_date := v_date;
ELSE
v_join_date = NULL;
END IF;
RETURN v_join_date;
END;
Run Code Online (Sandbox Code Playgroud) 我无法测试是否null = null,因为我没有权限在我正在使用的数据库上创建数据.
我的问题是:
如果我有一个包含两行的表:
Row 1: ItemID = 1, CollectionID = 1, Price = null
Row 2: ItemID = 2, CollectionID = 1, Price = null
Run Code Online (Sandbox Code Playgroud)
我的查询如下:
SELECT CollectionID
FROM my_table TB
WHERE Price >= (SELECT avg(Price)
FROM my_table
WHERE TB.CollectionID = CollectionID);
Run Code Online (Sandbox Code Playgroud)
会collectionID 1在结果中显示吗?换句话说,我们有for 和for的空值.TB.CollectionIDCollectionID
有TB.CollectionID = CollectionID吗?
我试图execute immediate用作分配变量值的特殊要求.我使用以下代码并获得如下异常.
declare
lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
l_str varchar2(400);
a number(10);
begin
select *
into lv_kyc_main_GBL
from KYC_GBL_MAIN.KYC_MAIN
where rownum = 1;
-- l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';
l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
dbms_output.put_line(l_str);
execute immediate (l_str);
end;
/
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
anonymous block completed
lv_kyc_main_GBL.legal_name := 'TEST'
Run Code Online (Sandbox Code Playgroud)
在命令的第4行开始出错:
declare
lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
l_str varchar2(400);
a number(10);
begin
select *
into lv_kyc_main_GBL
from KYC_GBL_MAIN.KYC_MAIN
where rownum = 1;
--l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';
l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
dbms_output.put_line(l_str);
execute immediate (l_str);
end;
/
Error report:
ORA-00900: invalid SQL statement
ORA-06512: …Run Code Online (Sandbox Code Playgroud) SpringBoot v2.5.1
有一个端点请求长时间运行的进程结果,并且它是以某种方式创建的
(为简单起见,它是Mono.fromCallable( ... long running ... ).
客户端发出请求并触发发布者执行工作,但几秒钟后客户端中止请求(即连接丢失)。并且该过程仍然继续利用资源来计算丢弃的结果。
通知 Project Reactor 事件循环有关应取消的不必要的正在进行的工作的机制是什么?
@RestController
class EndpointSpin {
@GetMapping("/spin")
Mono<Long> spin() {
AtomicLong counter = new AtomicLong(0);
Instant stopTime = Instant.now().plus(Duration.of(1, ChronoUnit.HOURS));
return Mono.fromCallable(() -> {
while (Instant.now().isBefore(stopTime)) {
counter.incrementAndGet();
if (counter.get() % 10_000_000 == 0) {
System.out.println(counter.get());
}
// of course this does not work
if (Thread.currentThread().isInterrupted()){
break;
}
}
return counter.get();
});
}
}
Run Code Online (Sandbox Code Playgroud) java reactive-programming cancellation project-reactor spring-webflux
oracle ×7
plsql ×4
sql ×3
java ×2
batch-file ×1
cancellation ×1
classloader ×1
cmd ×1
dynamic-sql ×1
exit-code ×1
function ×1
group-by ×1
java-module ×1
maven ×1
mysql ×1
null ×1
package ×1
privileges ×1
resources ×1