-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnotes.txt
32 lines (25 loc) · 1.28 KB
/
notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
* sql%rowcount
The coverage information is stored in a database table.
The code is instrumented with statements which check if a statement has been reached before.
If no, this information is immediately written to the database with the help of
an autonomous transaction. This overwrites the value in sql%rowcount and maybe
some other attributes of sql.
I use sql%rowcount to check if a update modified 0 or 1 rows.
If 0 rows then an insert will follow,
or an exception is thrown if 1 was expected. Quite a common pattern.
Solution:
After each statement which influences sql%rowcount its value is stored in
variable.
Global variable or package variable?
sql%rowcount is not affected by scopes, you can alter it in one procedure and
read it out in another procedure, maybe even in another package.
So instrumenting in one package for code coverage might mess up the execution in
another package which not instrumented.
But this is a bad style.
sql is a keyword in PL/SQL. You can not use it as a identifier.
The sql attributes found, notfound and isopen are boolean.
The attribute bulk_rowcount is different:
SQL%BULK_ROWCOUNT is like an associative array whose ith element is the number
of rows affected by the ith DML statement in the most recently completed FORALL
statement.
So maybe not a problem.