-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PL/SQL IntelliSense - package members #32
Comments
I have in mind autocomplition with procedures and functions from package files (./src, not from DB). But having conn with db would be even better. |
Also would love this functionality. |
I do not think that the best solution is to have limited workspace packages. |
Yes, you are right, Oracle should execute that query fairly quickly but
getting all that data may take several seconds.
This would be no problem if it happens in background.
Nevertheless I would see the need to also pars the workspace packages. I
don't want to connect to customer DB and in some cases I don't have that
connection or it requires VPN.
Best regards
Mateusz
2018-05-15 15:07 GMT+02:00 Danieleeee <[email protected]>:
… Basically it could be limited to workspace packages.
The use of DB connection might be slow.
I do not think this is the best solution have limited workspace packages.
In order to have the functionality with all the packages I would have to
download all the DB, of all the schema, locally.
Oracle is a payable DB with enough performance, I do not think waiting
times are long...
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#32 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AIUSCQTOLYp8RbJg5pa8YedJ8KZOZEf2ks5tytMEgaJpZM4QupvG>
.
--
Pozdrawiam
Mateusz Żurek
|
Hi guys, just wanted to let you know that 5 months ago I implemented the Go to Symbol in Workspace functionality which parses all packages in a workspace (using ctags), but my pull request was never reviewed. This functionality could also be upgraded to implement IntelliSense since I already have list of all packages and symbols inside it. Kind regards, |
Hi @MadeManMax , |
Hello everyone, |
Hi @Danieleeee, @bmarkovic17 - that would be nice. Best regards |
Hi @zabel-xyz , |
Hi @zabel-xyz, Thanks. |
Hi @zabel-xyz |
version 1.3.0:
|
Hi,
Best regards |
|
|
Hi @zabel-xyz ,
I don't know if this is part of this functionality. |
I agree with @MadeManMax, autocompletion of package name itself would be super useful. Thanks @zabel-xyz. |
Hi @zabel-xyz , |
@MadeManMax, @mickeypearce |
@Danieleeee Maybe is not a performance issue, but when it's fail, I notice it hangs loading... Or it takes time the first times only when loading the file. I can move it at another moment (eg extension activation) |
@zabel-xyz |
Yes, you can.
|
Thank you @Danieleeee |
@MadeManMax , |
@Danieleeee , Thank you. |
I create a table prova_dr with a clob column where to put results to copy in file "plsql.compleation.json" declare
v_app varchar2(1000);
stringa_superiore varchar2(32000):= '';
stringa_colonna clob:= '';
log_clob clob;
--
cursor c is Select t.TABLE_NAME,
'"'||t.TABLE_NAME||'":{
"kind": "struct",
"documentation": "'||c.comments||'",
"members": [' stringa_superiore,
'{"label": "'||t.COLUMN_NAME||'", "kind": "field","documentation":"'||data_type||'('||data_length||')"}' stringa_colonna
from dba_tab_columns t, all_tab_comments c
where t.owner in ('UTE', 'SIU_INT','ETADBA')
and t.TABLE_NAME = c.table_name
order by TABLE_NAME;
begin
dbms_lob.createtemporary(log_clob, true);
for cur in c loop
if v_app = cur.TABLE_NAME then
stringa_colonna := stringa_colonna||','||CHR(10)||replace(replace (cur.stringa_colonna,CHR(10),'\n'),'"','\"');
else
if dbms_lob.getlength(stringa_colonna)>3 then
if dbms_lob.getlength(stringa_colonna)>30000 then
dbms_lob.writeappend(log_clob, 30000, dbms_lob.substr( stringa_colonna, 30000, 1 ));
dbms_lob.writeappend(log_clob, dbms_lob.getlength(dbms_lob.substr( stringa_colonna, dbms_lob.getlength(stringa_colonna), 30001 )||CHR(10)||']},'||CHR(10)), dbms_lob.substr( stringa_colonna, dbms_lob.getlength(stringa_colonna), 30001 ) ||CHR(10)||']},'||CHR(10));
else
dbms_lob.writeappend(log_clob, dbms_lob.getlength(stringa_colonna||CHR(10)||']},'||CHR(10)), stringa_colonna||CHR(10)||']},'||CHR(10));
end if;
end if;
v_app := cur.TABLE_NAME;
stringa_superiore := cur.stringa_superiore;
dbms_lob.writeappend(log_clob, length(stringa_superiore), stringa_superiore||CHR(10));
stringa_colonna := replace(replace (cur.stringa_colonna,CHR(10),'\n'),'"','\"');
end if;
end loop;
--
if length(stringa_colonna)>3 then
dbms_lob.writeappend(log_clob, length(stringa_colonna||CHR(10)||']}'||CHR(10)), stringa_colonna||CHR(10)||']}'||CHR(10));
end if;
--
insert into prova_dr (parametrizzazione) values (log_clob);
commit;
--
dbms_lob.freetemporary(log_clob);
dbms_session.free_unused_user_memory;
exception
when others then
rollback;
dbms_lob.freetemporary(log_clob);
dbms_session.free_unused_user_memory;
dbms_output.put_line('Errore: '||sqlerrm);
end;
Package (no parameter desc, go to ALL_ARGUMENTS): declare
v_app varchar2(1000);
stringa_superiore varchar2(14000):= '';
stringa_colonna varchar2(32000):= '';
v_list_procedure varchar2(32000):= '';
log_clob clob;
cursor c is Select object_name,
'"'||object_name||'":{
"kind": "class",
"documentation": "Package '||owner||'\n-----\nlista_di_procedure",
"members": [' stringa_superiore,
'{"label": "'||PROCEDURE_NAME||'", "kind": "property", "documentation": ""}' stringa_colonna
from all_procedures ui
where owner in ('UTE','SIU_INT','ETADBA')
and object_type = 'PACKAGE'
order by object_name;
begin
dbms_lob.createtemporary(log_clob, true);
for cur in c loop
if v_app = cur.object_name then
stringa_colonna := stringa_colonna||','||CHR(10)||cur.stringa_colonna;
else
if length(stringa_colonna)>3 then
dbms_lob.writeappend(log_clob, length(stringa_colonna||CHR(10)||']},'||CHR(10)), stringa_colonna||CHR(10)||']},'||CHR(10));
end if;
v_app := cur.object_name;
stringa_superiore := cur.stringa_superiore;
SELECT RTRIM(XMLAGG(XMLELEMENT(E,PROCEDURE_NAME,'\n').EXTRACT('//text()') ORDER BY PROCEDURE_NAME).GetClobVal(),'\n') AS LIST
into v_list_procedure
FROM all_procedures
where object_name = cur.object_name
and object_type = 'PACKAGE';
stringa_superiore := replace(stringa_superiore, 'lista_di_procedure', v_list_procedure);
dbms_lob.writeappend(log_clob, length(stringa_superiore), stringa_superiore||CHR(10));
stringa_colonna := cur.stringa_colonna;
end if;
end loop;
--
dbms_lob.writeappend(log_clob, length(stringa_colonna||CHR(10)||']}'||CHR(10)), stringa_colonna||CHR(10)||']}'||CHR(10));
--
insert into prova_dr (parametrizzazione) values (log_clob);
commit;
--
dbms_lob.freetemporary(log_clob);
-- libera tutta la memoria non più utilizzata
dbms_session.free_unused_user_memory;
exception
when others then
rollback;
dbms_lob.freetemporary(log_clob);
-- libera tutta la memoria non più utilizzata
dbms_session.free_unused_user_memory;
dbms_output.put_line('Errore: '||sqlerrm);
end;
|
Fix for table update: declare
v_app varchar2(1000);
stringa_superiore varchar2(32000):= '';
stringa_colonna clob:= '';
log_clob clob;
--
cursor c is Select t.TABLE_NAME,
'"'||t.TABLE_NAME||'":{
"kind": "struct",
"documentation": "'|| replace(replace (c.comments,CHR(10),'\n'),'"','\"')||'",
"members": [' stringa_superiore,
'{"label": "'||t.COLUMN_NAME||'", "kind": "field","documentation":"'||data_type||'('||data_length||')"}' stringa_colonna
from dba_tab_columns t, all_tab_comments c
where t.owner in ('UTE', 'SIU_INT','ETADBA')
and t.TABLE_NAME = c.table_name
order by TABLE_NAME;
begin
dbms_lob.createtemporary(log_clob, true);
for cur in c loop
if v_app = cur.TABLE_NAME then
stringa_colonna := stringa_colonna||','||cur.stringa_colonna;
else
if dbms_lob.getlength(stringa_colonna)>3 then
if dbms_lob.getlength(stringa_colonna)>30000 then
dbms_lob.writeappend(log_clob, 30000, dbms_lob.substr( stringa_colonna, 30000, 1 ));
dbms_lob.writeappend(log_clob, dbms_lob.getlength(dbms_lob.substr( stringa_colonna, dbms_lob.getlength(stringa_colonna), 30001 )||CHR(10)||']},'||CHR(10)), dbms_lob.substr( stringa_colonna, dbms_lob.getlength(stringa_colonna), 30001 ) ||CHR(10)||']},'||CHR(10));
else
dbms_lob.writeappend(log_clob, dbms_lob.getlength(stringa_colonna||CHR(10)||']},'||CHR(10)), stringa_colonna||CHR(10)||']},'||CHR(10));
end if;
end if;
v_app := cur.TABLE_NAME;
stringa_superiore := cur.stringa_superiore;
dbms_lob.writeappend(log_clob, length(stringa_superiore), stringa_superiore||CHR(10));
stringa_colonna := cur.stringa_colonna;
end if;
end loop;
--
if length(stringa_colonna)>3 then
dbms_lob.writeappend(log_clob, length(stringa_colonna||CHR(10)||']}'||CHR(10)), stringa_colonna||CHR(10)||']}'||CHR(10));
end if;
--
insert into prova_dr (parametrizzazione) values (log_clob);
commit;
--
dbms_lob.freetemporary(log_clob);
dbms_session.free_unused_user_memory;
exception
when others then
rollback;
dbms_lob.freetemporary(log_clob);
dbms_session.free_unused_user_memory;
dbms_output.put_line('Errore: '||sqlerrm);
end; |
My control query looks like one below SELECT t.TABLE_NAME
, '"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'
|| c.comments
|| '",
"members": ['
|| REPLACE(
( SELECT RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| '). '
|| com.comments)
|| '"}'
,',').EXTRACT('//text()')).GetClobVal()
,',')
FROM all_tab_columns cc, all_col_comments com
WHERE cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner)
,'"'
,'"')
|| ']}'
FROM all_tables t, all_tab_comments c
WHERE t.table_name = c.table_name
AND t.owner = c.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
ORDER BY t.TABLE_NAME; |
Hi, SELECT '{'||rtrim(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),',')||'}' FROM (
SELECT t.TABLE_NAME
,'"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'
||replace(replace(REPLACE(c.comments,'\','\\'),'"','\"'),CHR(10),'\n')
|| '",
"members": ['
|| REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| '). '
|| replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'))
|| '"}'
,',').EXTRACT('//text()')).GetClobVal()
,','),'"','"')
|| ']}' datarow
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by t.table_name,c.comments
ORDER BY t.TABLE_NAME) |
Hi @MadeManMax , SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}' FROM (
SELECT t.TABLE_NAME
,'"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'
||replace(replace(REPLACE(c.comments,'\','\\'),'"','\"'),CHR(10),'\n')
|| '",
"members": ['
|| REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| ')\n'
|| replace(replace(replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),' ','\t'))
|| '"}'
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')
|| ']}'||CHR(10) datarow
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by t.table_name,c.comments
ORDER BY t.TABLE_NAME); |
Hi @Danieleeee , In my case I'm basically using one schema so I don't have such problem. Best regards |
Done, SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}'
FROM (
SELECT '"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.TABLE_NAME||'\n'
||replace(replace(REPLACE(c.comments,'\','\\'),'"','\"'),CHR(10),'\n')
|| '",
"members": ['
|| REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| ')\n'
|| replace(replace(replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t'))
|| '"}'
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')
|| ']}'||CHR(10) datarow
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by c.comments,t.owner,t.table_name
ORDER BY t.TABLE_NAME,t.owner); |
Hi @Danieleeee , SELECT owner,TABLE_NAME, count(*)
FROM (
SELECT '"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.TABLE_NAME||'\n'
|| replace(replace(replace(replace(replace(c.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
|| '",
"members": ['
|| REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| ')\n'
|| replace(replace(replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
)
|| '"}'
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')
|| ']}'||CHR(10) datarow,t.table_name,t.owner
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by t.owner,t.table_name,c.comments
ORDER BY t.owner,t.TABLE_NAME)
group by owner,TABLE_NAME
having count(*) > 1 Below is slightly modified query. The comments column used for table documentation part also needs to handle special characters. SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}'
FROM (
SELECT '"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.TABLE_NAME||'\n'
|| replace(replace(replace(replace(replace(c.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
|| '",
"members": ['
|| REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| ')\n'
|| replace(replace(replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
)
|| '"}'
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')
|| ']}'||CHR(10) datarow
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by t.owner,t.table_name,c.comments
ORDER BY t.owner,t.TABLE_NAME); |
Yes the problem of duplicate rows is with owner. SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}'
FROM (
SELECT '"'
|| t.object_name
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.object_name||'\n'
-- || replace(replace(replace(replace(replace(c.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
|| '",
"members": ['
|| REPLACE(REPLACE(RTRIM( XMLAGG(XMLELEMENT( e, '{"label": "'||a.object_name || '", "kind": "field", "documentation": "'||
REPLACE(REPLACE(RTRIM( XMLAGG(XMLELEMENT( e, TRIM((a.argument_name||' '||a.in_out||' '||a.data_type))
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')||'"},'||CHR(10)).EXTRACT('//text()')).GetClobVal()),'"','"'),''','''')||CHR(10)
|| ']}'||CHR(10) datarow
FROM all_procedures t, ALL_ARGUMENTS a
WHERE t.object_type = 'PACKAGE'
AND t.owner IN ('UTE')
and a.OBJECT_ID = t.object_id
and a.package_name = t.object_name
and a.argument_name is not null
and a.OBJECT_NAME = t.PROCEDURE_NAME
and a.OWNER = t.owner
group by t.owner, t.object_name
ORDER BY t.owner,t.object_name) |
This works: SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}'
FROM (
SELECT '"'
|| t.object_name
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.object_name||'\n'
-- || replace(replace(replace(replace(replace(c.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
|| '",
"members": ['
|| REPLACE(REPLACE(RTRIM( XMLAGG(XMLELEMENT( e, '{"label": "'||t.PROCEDURE_NAME || '", "kind": "field", "documentation": "'||
(SELECT REPLACE(REPLACE(RTRIM( XMLAGG(XMLELEMENT( e, TRIM((a.argument_name||' '||a.in_out||' '||a.data_type))
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')||'"},'||CHR(10)
FROM ALL_ARGUMENTS a
where a.package_name = t.object_name
and a.OBJECT_NAME = t.PROCEDURE_NAME
and a.OBJECT_ID = t.object_id
and argument_name is not null
and a.OWNER = t.owner
group by a.object_name)
).EXTRACT('//text()')).GetClobVal()),'"','"'),''','''')||CHR(10)
|| ']}'||CHR(10) datarow
FROM all_procedures t
WHERE t.object_type = 'PACKAGE'
AND t.owner IN ('UTE')
group by t.owner, t.object_name
ORDER BY t.owner,t.object_name); |
Hi @Danieleeee , SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,procdata,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}' FROM (
SELECT '"' || a.package_name || '":{"kind":"class","documentation": "' || a.OWNER||'.'||a.PACKAGE_NAME ||'",'
|| '"members":[' ||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||']}' procdata
FROM (SELECT a.owner, a.package_name, '{"label": "' || a.object_name || '", "kind": "method", "documentation": "' ||
REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
,CASE WHEN a.ARGUMENT_NAME IS NULL AND IN_OUT = 'OUT'
THEN 'RETURN ' ||
CASE WHEN a.DATA_TYPE IN ('TABLE','UNDEFINED','OBJECT')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
WHEN a.ARGUMENT_NAME IS NOT NULL
THEN a.argument_name||' '||a.in_out||' '||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
end
,','||'\n').EXTRACT('//text()')).GetClobVal()
,','||'\n'),'"','"'),''','''')|| '"}'||CHR(10) datarow
FROM (SELECT * FROM ALL_ARGUMENTS a
WHERE a.package_name is NOT null
AND a.OWNER = 'UTE'
and a.POSITION = CASE WHEN a.ARGUMENT_NAME IS NULL THEN 0 ELSE a.POSITION END
order by a.package_name, a.object_name, a.SEQUENCE, a.POSITION) a
group by a.owner,a.package_name , a.object_name
) a group by a.owner,a.package_name ) z |
In this case you can go one step back in this query and try to write script that will compose clobs return by below query. It is returning separate clobs for packages SELECT '"' || a.package_name || '":{"kind":"class","documentation": "' || a.OWNER||'.'||a.PACKAGE_NAME ||'",'
|| '"members":[' ||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||']}' procdata
FROM (SELECT a.owner, a.package_name, '{"label": "' || a.object_name || '", "kind": "method", "documentation": "' ||
REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
,CASE WHEN a.ARGUMENT_NAME IS NULL AND IN_OUT = 'OUT'
THEN 'RETURN ' ||
CASE WHEN a.DATA_TYPE IN ('TABLE','UNDEFINED','OBJECT')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
WHEN a.ARGUMENT_NAME IS NOT NULL
THEN a.argument_name||' '||a.in_out||' '||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
end
,','||'\n').EXTRACT('//text()')).GetClobVal()
,','||'\n'),'"','"'),''','''')|| '"}'||CHR(10) datarow
FROM (SELECT * FROM ALL_ARGUMENTS a
WHERE a.package_name is NOT null
AND a.OWNER = 'UTE'
and a.POSITION = CASE WHEN a.ARGUMENT_NAME IS NULL THEN 0 ELSE a.POSITION END
order by a.package_name, a.object_name, a.SEQUENCE, a.POSITION) a
group by a.owner,a.package_name , a.object_name
) a group by a.owner,a.package_name |
If I execute this select, have the same error. |
I've try to execute query for all owners on my DB and I don't have this problem. SELECT owner,package_name, count(*) FROM all_arguments group by owner,package_name
order by count(*) desc I have around 3000 packages and generated file contain 32000 lines and around 9M characters. In google I've found some comment mentioning use of temporary table but I'm not sure that it will help you. |
I've extended the list of data types and I've added handling of overloaded objects SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,procdata,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}' FROM (
SELECT '"' || a.package_name || '":{"kind":"class","documentation": "' || a.OWNER||'.'||a.PACKAGE_NAME ||'",'
|| '"members":[' ||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||']}' procdata
FROM (SELECT a.owner, a.package_name, '{"label": "' || a.object_name || '", "kind": "method", "documentation": "' ||
CASE WHEN a.OVERLOAD IS NOT NULL THEN 'Overloaded ['||a.OVERLOAD||']\n'ELSE NULL END ||
REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
,CASE WHEN a.ARGUMENT_NAME IS NULL AND IN_OUT = 'OUT'
THEN 'RETURN ' ||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
WHEN a.ARGUMENT_NAME IS NOT NULL
THEN a.argument_name||' '||a.in_out||' '||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
end
,','||'\n').EXTRACT('//text()')).GetClobVal()
,','||'\n'),'"','"'),''','''')|| '"}'||CHR(10) datarow
FROM (SELECT * FROM ALL_ARGUMENTS a
WHERE a.package_name is NOT null
AND a.OWNER = 'UTE'
and a.POSITION = CASE WHEN a.ARGUMENT_NAME IS NULL THEN 0 ELSE a.POSITION END
order by a.package_name,a.SUBPROGRAM_ID, a.object_name,TO_NUMBER(a.OVERLOAD), a.SEQUENCE, a.POSITION) a
group by a.owner,a.package_name ,a.SUBPROGRAM_ID, a.object_name, a.OVERLOAD
) a group by a.owner,a.package_name ) z |
Result of my count is 12855 SELECT owner,package_name, count(*) FROM all_arguments group by owner,package_name
order by count(*) desc |
The problem is with the amount of parameters of each procedure. SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,procdata,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}' FROM (
SELECT '"' || a.package_name || '":{"kind":"class","documentation": "' || a.OWNER||'.'||a.PACKAGE_NAME ||'",'
|| '"members":[' ||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||']}' procdata
FROM (SELECT a.owner, a.package_name, '{"label": "' || a.object_name || '", "kind": "method", "documentation": "' ||
CASE WHEN a.OVERLOAD IS NOT NULL THEN 'Overloaded ['||a.OVERLOAD||']\n'ELSE NULL END ||
REPLACE(REPLACE(
RTRIM(
DBMS_LOB.substr( XMLAGG(
XMLELEMENT(
e
,CASE WHEN a.ARGUMENT_NAME IS NULL AND IN_OUT = 'OUT'
THEN 'RETURN ' ||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
WHEN a.ARGUMENT_NAME IS NOT NULL
THEN a.argument_name||' '||a.in_out||' '||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
end
,','||'\n').EXTRACT('//text()')).GetClobVal(),3500)
,','||'\n'),'"','"'),''','''')|| '"}'||CHR(10) datarow
FROM (SELECT * FROM ALL_ARGUMENTS a
WHERE a.package_name is NOT null
AND a.OWNER = 'UTE'
and a.POSITION = CASE WHEN a.ARGUMENT_NAME IS NULL THEN 0 ELSE a.POSITION END
order by a.package_name,a.SUBPROGRAM_ID, a.object_name,TO_NUMBER(a.OVERLOAD), a.SEQUENCE, a.POSITION) a
group by a.owner,a.package_name ,a.SUBPROGRAM_ID, a.object_name, a.OVERLOAD
) a group by a.owner,a.package_name ) z |
I think that with this tow select we don't need workspace parser completion. DB Object: SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,procdata,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}' FROM (
SELECT '"' || a.package_name || '":{"kind":"class","documentation": "' || a.OWNER||'.'||a.PACKAGE_NAME ||'",'
|| '"members":[' ||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||']}' procdata
FROM (SELECT a.owner, a.package_name, '{"label": "' || a.object_name || '", "kind": "method", "documentation": "' ||
CASE WHEN a.OVERLOAD IS NOT NULL THEN 'Overloaded ['||a.OVERLOAD||']\n'ELSE NULL END ||
REPLACE(REPLACE(
RTRIM(
DBMS_LOB.substr( XMLAGG(
XMLELEMENT(
e
,CASE WHEN a.ARGUMENT_NAME IS NULL AND IN_OUT = 'OUT'
THEN 'RETURN ' ||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
WHEN a.ARGUMENT_NAME IS NOT NULL
THEN a.argument_name||' '||a.in_out||' '||
CASE WHEN a.DATA_TYPE IN ('TABLE','OBJECT','PL/SQL TABLE','UNDEFINED','PL/SQL RECORD','VARRAY')
THEN RTRIM(a.TYPE_OWNER || CASE WHEN a.TYPE_OWNER IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_NAME || CASE WHEN a.TYPE_NAME IS NOT NULL THEN '.' ELSE NULL END
|| a.TYPE_SUBNAME || CASE WHEN a.TYPE_SUBNAME IS NOT NULL THEN '.' ELSE NULL END,'.')
ELSE CASE WHEN a.DATA_TYPE = 'PL/SQL BOOLEAN' THEN a.PLS_TYPE ELSE a.DATA_TYPE END
END
end
,','||'\n').EXTRACT('//text()')).GetClobVal(),3500)
,','||'\n'),'"','"'),''','''')|| '"}'||CHR(10) datarow
FROM (SELECT * FROM ALL_ARGUMENTS a
WHERE a.package_name is NOT null
AND a.OWNER in ('UTE','SIU_INT','ETADBA')
and a.POSITION = CASE WHEN a.ARGUMENT_NAME IS NULL THEN 0 ELSE a.POSITION END
order by a.package_name,a.SUBPROGRAM_ID, a.object_name,TO_NUMBER(a.OVERLOAD), a.SEQUENCE, a.POSITION) a
group by a.owner,a.package_name ,a.SUBPROGRAM_ID, a.object_name, a.OVERLOAD
) a group by a.owner,a.package_name ) z DB Table: SELECT '{'||rtrim(REPLACE(REPLACE(XMLAGG(XMLELEMENT(a,datarow,',').EXTRACT('//text()')).GetClobVal(),'"','"'),''',''''),',')||'}'
FROM (
SELECT '"'
|| t.TABLE_NAME
|| '":{
"kind": "struct",
"documentation": "'||t.owner||'.'||t.TABLE_NAME||'\n'
|| replace(replace(replace(replace(replace(c.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
|| '",
"members": ['
|| REPLACE(REPLACE(
RTRIM(
XMLAGG(
XMLELEMENT(
e
, TRIM('{"label": "'
|| CASE
WHEN cc.Column_name LIKE '% %'
THEN
'\"' || cc.Column_name || '\"'
ELSE
cc.Column_name
END
|| '", "kind": "field", "documentation": "'
|| cc.data_type
|| '('
|| cc.data_length
|| ')\n'
|| replace(replace(replace(replace(replace(com.comments,'\','\\'),'"','\"'),CHR(10),'\n'),CHR(13),'\r'),CHR(09),'\t')
)
|| '"}'
,','||CHR(10)).EXTRACT('//text()')).GetClobVal()
,','||CHR(10)),'"','"'),''','''')
|| ']}'||CHR(10) datarow
FROM all_tables t, all_tab_comments c, all_tab_columns cc, all_col_comments com
WHERE t.table_name = c.table_name
AND t.owner = c.owner
and cc.column_name = com.column_name
AND cc.table_name = com.table_name
AND cc.table_name = t.table_name
AND cc.Owner = com.owner
AND cc.owner = t.owner
AND t.owner IN ('UTE', 'SIU_INT', 'ETADBA')
group by t.owner,t.table_name,c.comments
ORDER BY t.owner,t.TABLE_NAME); @mickeypearce , can you use this with oradew-vscode extension for update plsql.completion.json? |
Hello,
Would it be possible to provide package members autocomplition?
(For example when I write package name and dot it would list package members to choose from)
That would be perfect.
The text was updated successfully, but these errors were encountered: