├── .gitignore ├── DatabaseObjects ├── Clusters │ └── intro │ │ ├── _run.sql │ │ ├── create-cluster.sql │ │ ├── create-index.sql │ │ ├── create-tables.sql │ │ ├── data-dictionary.sql │ │ ├── db-blocks.sql │ │ ├── drop.sql │ │ ├── insert.sql │ │ └── plan.sql ├── Database-Links │ └── function.sql ├── Indexes │ ├── create_index_during_execution.pl │ ├── create_index_during_execution.plsql │ ├── foreign-key.sql │ ├── global_partitioned_index.sql │ ├── own-namespace.sql │ ├── partial-index.sql │ ├── partitioned │ │ ├── global │ │ │ └── create.sql │ │ └── local │ │ │ ├── aligned.sql │ │ │ └── vs-ordinary │ │ │ ├── create-local-index.sql │ │ │ ├── create-ordinary-index.sql │ │ │ ├── create-table.sql │ │ │ ├── gather-stats.sql │ │ │ ├── insert.sql │ │ │ ├── user_ind_partitions.sql │ │ │ ├── user_ind_statistics.sql │ │ │ ├── user_ind_subpartitions.sql │ │ │ └── user_indexes.sql │ └── unique_indexes_null_values.sql ├── MaterializedViews │ ├── on_prebuilt_table.sql │ └── on_prebuilt_table_iot.sql ├── README.md ├── Sequences │ ├── 12c │ │ └── session.sql │ ├── auto_increment.sql │ ├── default-value-for-column.sql │ ├── failed_insert.sql │ └── sequence.sql ├── Tables │ ├── 12c │ │ └── identity_start_with.sql │ ├── AlterTable │ │ ├── add_column.sql │ │ ├── add_foreign_key.sql │ │ ├── drop_column.sql │ │ ├── mark_column_unused.sql │ │ └── rename_column.sql │ ├── AttributeClustering │ │ ├── interleaved-ordering-01.sql │ │ ├── linear-ordering-01.sql │ │ ├── show-reduction-in-used-db-blocks.sql │ │ └── user_tables.sql │ ├── Heap │ │ └── create_heap_table.sql │ ├── ILM │ │ └── add-policy.sql │ ├── IndexOrganized │ │ └── create_iot.sql │ ├── IntegrityConstraints │ │ ├── drop_child.sql │ │ ├── exceptions_into │ │ │ └── enable_pk.sql │ │ └── not_null_non_unique.sql │ ├── Locks │ │ └── lockmodes.sql │ ├── Partitions │ │ ├── README.md │ │ ├── composite-interval-list.sql │ │ ├── composite_list-hash.sql │ │ ├── composite_range-list.sql │ │ ├── distribution-techniques │ │ │ ├── composite │ │ │ │ └── subpartition-template │ │ │ │ │ ├── interval-list-data-dictionary.sql │ │ │ │ │ └── interval-list.sql │ │ │ └── list │ │ │ │ ├── create-table.sql │ │ │ │ └── explain-plan.sql │ │ ├── drop_partition.sql │ │ ├── drop_partition_with_non_local_index.sql │ │ ├── hash_partitioning.sql │ │ ├── interval-based-on-char.sql │ │ ├── interval-partition-number.sql │ │ ├── interval_partitioning.sql │ │ ├── local_partitioned_index.sql │ │ ├── local_prefixed_vs_non_prefixed_index.sql │ │ ├── ora-01841.sql │ │ ├── range-range.sql │ │ ├── range_partitioning.sql │ │ └── truncate-partition.sql │ ├── RecycleBin │ │ ├── purge.sql │ │ ├── purge_tablespace.sql │ │ ├── show_recycle_bin_sql.sql │ │ └── show_recycle_bin_sqlplus.sql │ ├── columns │ │ ├── default │ │ │ └── sequence.sql │ │ ├── diff-structure │ │ │ ├── create-tables.sql │ │ │ └── diff.sql │ │ ├── identity │ │ │ ├── intro.sql │ │ │ └── returning.sql │ │ └── virtual │ │ │ ├── modify.sql │ │ │ ├── test_02.sql │ │ │ ├── test_03.sql │ │ │ ├── test_04.sql │ │ │ └── virt-cols-referencing-virt-cols.sql │ ├── default-values │ │ └── example-01.sql │ ├── identity-column │ │ └── example-01.sql │ ├── parallel │ │ └── degree-default-16.sql │ ├── period-definition │ │ └── example-01.sql │ ├── row-archival │ │ └── example-01.sql │ ├── storage_clause │ │ └── maxsize_01.sql │ └── types │ │ ├── create-some.sql │ │ └── data-dictionary.sql ├── Triggers │ ├── README.md │ ├── before_for_each_row.sql │ ├── ddl_instead_of.sql │ └── determine_firing_sql.sql ├── Types │ └── compile_force_with_dependends.plsql ├── Views │ ├── UpdateableJoinViews │ │ └── test_01.sql │ └── triggersOnViews │ │ ├── instead_of.sql │ │ └── lostTrigger.sql ├── count_objects_per_user.sql └── scripts │ └── drop.sql ├── Globalization └── nls_numeric_characters.sql ├── Installed ├── data-dictionary │ ├── .gitignore │ ├── addm │ │ ├── findings │ │ │ └── joins.sql │ │ └── tasks │ │ │ └── show.sql │ ├── alert │ │ ├── arguments │ │ │ └── show.sql │ │ └── history │ │ │ └── show.sql │ ├── audit │ │ └── exists │ │ │ └── show.sql │ ├── catalog │ │ └── table_types.sql │ ├── col │ │ └── comments │ │ │ └── example-01.sql │ ├── coll_types │ │ └── example-01.sql │ ├── common_audit_trail │ │ ├── logon-logoff.sql │ │ └── show.sql │ ├── connect_role_grantees │ │ └── show.sql │ ├── cons_columns │ │ └── show_constraint_columns.sql │ ├── constraints │ │ └── constraint_type.sql │ ├── context │ │ └── show.sql │ ├── cpu_usage_statistics │ │ └── show.sql │ ├── data_files │ │ └── show.sql │ ├── datapump │ │ ├── jobs │ │ │ └── show.sql │ │ └── sessions │ │ │ └── show.sql │ ├── db_links │ │ ├── README.md │ │ └── show.sql │ ├── ddl_locks │ │ └── show.sql │ ├── def_audit_opts │ │ └── show.sql │ ├── dependencies │ │ ├── clean-schema.sql │ │ ├── example-01.sql │ │ └── recursive.sql │ ├── directories │ │ └── privileges.sql │ ├── dml_locks │ │ └── example-01.sql │ ├── errors │ │ ├── common-error-messages.sql │ │ └── joins.sql │ ├── external │ │ └── locations │ │ │ └── joins.sql │ ├── feature_usage_statistics │ │ ├── names.sql │ │ └── overview.sql │ ├── free_space │ │ └── joins.sql │ ├── high_water_mark_statistics │ │ └── names-and-descriptions.sql │ ├── ind │ │ └── columns │ │ │ └── columns-of-index.sql │ ├── indexes │ │ └── indexes-on-table.sql │ ├── invalid_objects │ │ └── show.sql │ ├── jobs │ │ ├── running │ │ │ └── show.sql │ │ └── show.sql │ ├── join_ind_columns │ │ └── example-01.sql │ ├── lock │ │ └── show.sql │ ├── logstdby │ │ ├── parameters │ │ │ └── parameter-names.sql │ │ ├── skip │ │ │ └── show.sql │ │ └── unsupported │ │ │ ├── show.sql │ │ │ └── table │ │ │ └── show.sql │ ├── network │ │ ├── acl_privileges │ │ │ └── show.sql │ │ └── acls │ │ │ └── show.sql │ ├── nls │ │ ├── database_parameters │ │ │ └── show.sql │ │ ├── instance_parameters │ │ │ └── show.sql │ │ └── session_parameters │ │ │ ├── compare-with-db-and-instance.sql │ │ │ └── show.sql │ ├── obj │ │ └── audit_opts │ │ │ └── show.sql │ ├── object │ │ └── size │ │ │ └── show.sql │ ├── objects │ │ ├── joins.sql │ │ ├── object_type.sql │ │ └── possibly-unused-objects.sql │ ├── outstanding_alerts │ │ └── show.sql │ ├── part_tables │ │ └── README.md │ ├── password_limits │ │ └── resource_names.sql │ ├── plsql_object_settings │ │ └── example-01.sql │ ├── profiles │ │ └── pivot.sql │ ├── recyclebin │ │ └── example-01.sql │ ├── registry │ │ ├── banners │ │ │ └── show.sql │ │ ├── database │ │ │ └── show.sql │ │ └── show.sql │ ├── represoultion │ │ └── method │ │ │ └── show.sql │ ├── resource │ │ ├── incarnations │ │ │ └── show.sql │ │ └── limits │ │ │ └── show.sql │ ├── role │ │ ├── privs │ │ │ └── show-privs-for-specific-user.sql │ │ ├── role_privs │ │ │ └── show.sql │ │ ├── sys_privs │ │ │ └── show-privs-for-specific-role.sql │ │ └── tab_privs │ │ │ └── show-privs-for-specific-role.sql │ ├── roles │ │ ├── oracle-maintained-roles.sql │ │ └── show.sql │ ├── scheduler │ │ └── global_attribute │ │ │ └── attribute_names.sql │ ├── segments │ │ └── find-largest.sql │ ├── snapshots │ │ └── show.sql │ ├── source │ │ └── show-package-bodys-source-text.sql │ ├── sql │ │ ├── management_config │ │ │ └── parameter_names.sql │ │ ├── monitor_usage │ │ │ └── show.sql │ │ ├── plan │ │ │ ├── dir_objects │ │ │ │ └── joins.sql │ │ │ └── directives │ │ │ │ └── show.sql │ │ └── profiles │ │ │ └── show.sql │ ├── sqlset │ │ └── show.sql │ ├── stat_extensions │ │ └── show.sql │ ├── stmt_audit_option_map │ │ └── names.sql │ ├── stored_settings │ │ └── show.sql │ ├── streams │ │ ├── columns │ │ │ └── show.sql │ │ ├── newly_supported │ │ │ └── show.sql │ │ └── unsupported │ │ │ └── show.sql │ ├── subscr_registration │ │ └── show.sql │ ├── sum_delta │ │ └── joins.sql │ ├── summaries │ │ └── show.sql │ ├── summary │ │ ├── aggregates │ │ │ └── show.sql │ │ ├── detail_tables │ │ │ └── show.sql │ │ ├── joins │ │ │ └── show.sql │ │ └── keys │ │ │ └── show.sql │ ├── supplemental_logging │ │ └── show.sql │ ├── sys_privs │ │ └── show-privs-for-specific-user.sql │ ├── tab │ │ ├── cols │ │ │ └── hidden-and-virtual-columns.sql │ │ ├── columns │ │ │ └── find-table-with-name-of-2-columns.sql │ │ ├── comments │ │ │ └── show.sql │ │ ├── histograms │ │ │ └── simple.sql │ │ ├── modifications │ │ │ └── show.sql │ │ ├── partitions │ │ │ └── README.md │ │ ├── privs │ │ │ ├── grantors-grants.sql │ │ │ ├── privilege-matrix.sql │ │ │ └── show-privs-for-specific-user.sql │ │ ├── statistics │ │ │ ├── select.sql │ │ │ └── stale-or-no-statistics.sql │ │ └── subpartitions │ │ │ └── README.md │ ├── tablespace │ │ └── usage_metrics │ │ │ └── show.sql │ ├── temp │ │ └── free_space │ │ │ └── show.sql │ ├── transformations │ │ └── show.sql │ ├── trigger │ │ └── cols │ │ │ └── show.sql │ ├── ts_quotas │ │ └── show.sql │ ├── type │ │ ├── attrs │ │ │ └── example-01.sql │ │ └── methods │ │ │ └── example-01.sql │ ├── types │ │ └── example-01.sql │ ├── unused │ │ └── col_tabs │ │ │ └── show.sql │ ├── updatable_columns │ │ └── show.sql │ ├── user_all_dba_cdb_notes.sql │ ├── user_all_dba_cdb_view.sql │ ├── user_all_dba_names.sql │ ├── user_all_dba_names_2_html.sql │ ├── users │ │ ├── account_status.sql │ │ ├── joins.sql │ │ └── with_defpwd │ │ │ └── joins.sql │ ├── ustats │ │ └── show.sql │ ├── warning_settings │ │ └── show.sql │ ├── xml │ │ └── tables │ │ │ └── show.sql │ └── xs │ │ └── users │ │ └── show.sql ├── dbms │ ├── advanced_rewrite │ │ └── intro │ │ │ ├── _run.sql │ │ │ ├── equivalence-1.sql │ │ │ ├── grant.sql │ │ │ ├── select-1.sql │ │ │ └── table-1.sql │ ├── audit_mgmt │ │ ├── README.md │ │ ├── archiving │ │ │ ├── archive.sql │ │ │ ├── bug_9164488.sql │ │ │ └── init.sql │ │ └── set_audit_trail_location.sql │ ├── comparison │ │ └── compare-table-content.sql │ ├── crypto │ │ └── hash │ │ │ ├── md5.sql │ │ │ └── sha-256.sql │ ├── cube_log │ │ ├── default_name.sql │ │ └── table_create.sql │ ├── datapump │ │ ├── clone_schema │ │ │ ├── README.md │ │ │ ├── call_count_procs.sql │ │ │ ├── cleanup.sql │ │ │ ├── create_schemas.sql │ │ │ ├── export.par │ │ │ ├── export.plsql │ │ │ ├── export_import_dp.sql │ │ │ ├── export_import_plsql.sql │ │ │ ├── import.par │ │ │ ├── import.plsql │ │ │ └── run.sql │ │ └── extract_schema_sql │ │ │ ├── README.md │ │ │ ├── create_schema.sql │ │ │ ├── dbms_datapump_exception.plsql │ │ │ ├── export_dump.plsql │ │ │ ├── export_sql.plsql │ │ │ ├── import_sql_file.sql │ │ │ └── run.sql │ ├── describe │ │ └── describe_procedure.sql │ ├── errlog │ │ ├── _run.sql │ │ ├── error-table.sql │ │ ├── insert-dest.sql │ │ ├── insert-src.sql │ │ ├── select.sql │ │ └── table.sql │ ├── fga │ │ └── 01_add_policy.sql │ ├── lob │ │ ├── clob_from_long_string.sql │ │ ├── clob_from_varchars.sql │ │ ├── insert_into_with_blob.sql │ │ ├── max_length.sql │ │ ├── really_long_clob.sql │ │ └── temporary │ │ │ └── create-free.sql │ ├── lobutil │ │ └── inode.sql │ ├── lock │ │ ├── blue.sql │ │ ├── green.sql │ │ ├── run.bat │ │ ├── session_blue.bat │ │ ├── session_green.bat │ │ ├── sleep.sql │ │ └── stop_sessions │ │ │ ├── blue.sql │ │ │ ├── green.sql │ │ │ ├── run.bat │ │ │ ├── session_blue.bat │ │ │ └── session_green.bat │ ├── metadata │ │ ├── extract_table_definition.sql │ │ └── user.sql │ ├── metadata_diff │ │ └── diff_two_tables.sql │ ├── mining │ │ ├── model │ │ │ └── attributes │ │ │ │ └── show.sql │ │ ├── models │ │ │ └── show.sql │ │ └── settings │ │ │ └── show.sql │ ├── pipe │ │ ├── perl │ │ │ ├── read_pipe.pl │ │ │ └── write_pipe.plsql │ │ ├── purge │ │ │ ├── blue.sql │ │ │ ├── green.sql │ │ │ ├── run.bat │ │ │ ├── session_blue.bat │ │ │ └── session_green.bat │ │ ├── readme.md │ │ └── send_receive │ │ │ ├── blue.sql │ │ │ ├── green.sql │ │ │ ├── run.bat │ │ │ ├── session_blue.bat │ │ │ └── session_green.bat │ ├── predictive_analytics │ │ └── explain_and_predict_and_profile.sql │ ├── preprocessor │ │ └── get_post_processed_source_1.sql │ ├── random │ │ ├── normal.sql │ │ ├── string.sql │ │ ├── terminate.sql │ │ └── value.sql │ ├── redefinition │ │ └── rename-column_change-datatype │ │ │ ├── _run.sql │ │ │ ├── abort_redef_table.sql │ │ │ ├── can_redef_table.sql │ │ │ ├── copy_table_dependents.sql │ │ │ ├── create-table-int.sql │ │ │ ├── create-table.sql │ │ │ ├── drop-tables.sql │ │ │ ├── finish_redef_table.sql │ │ │ ├── insert-data.sql │ │ │ ├── select.sql │ │ │ ├── start_redef_table.sql │ │ │ └── sync_interim_table.sql │ ├── rowid │ │ ├── rowid_object.partition-of-record.sql │ │ └── select.sql │ ├── scheduler │ │ ├── create_job_twice.plsql │ │ └── program_schedule_job │ │ │ ├── clean_up.plsql │ │ │ ├── create.plsql │ │ │ ├── package.plsql │ │ │ └── table.sql │ ├── scn │ │ └── getcurrentscnparams.sql │ ├── snapshot │ │ └── refresh_commit.sql │ ├── space │ │ └── unused_space.sql │ ├── space_admin │ │ └── segment_dump │ │ │ └── go.sql │ ├── sql │ │ ├── last_sql_function_code.sql │ │ ├── parse │ │ │ └── parse-twice.sql │ │ ├── parse_gt_32k.plsql │ │ ├── plsql_block_with_out_parameters.plsql │ │ ├── return_result.sql │ │ └── select_from_table.sql │ ├── sql_translator │ │ └── interface-package │ │ │ ├── _run.sql │ │ │ ├── body.sql │ │ │ ├── get-translated.sql │ │ │ ├── profile.sql │ │ │ ├── select.sql │ │ │ ├── set-events.sql │ │ │ ├── set-profile.sql │ │ │ └── spec.sql │ ├── stat_funcs │ │ └── summary.sql │ ├── stats │ │ ├── avg_row_len.sql │ │ ├── constants.sql │ │ ├── gather_table_stats_01.sql │ │ ├── get_prefs.sql │ │ └── transaction.sql │ ├── system │ │ └── read_ev.sql │ ├── tf │ │ ├── add-columns.sql │ │ └── introduction │ │ │ ├── columns.sql │ │ │ └── run.sql │ ├── utility │ │ ├── compile_schema.plsql │ │ ├── db_version.plsql │ │ ├── expand_sql_text.sql │ │ ├── expand_sql_text │ │ │ └── script.ps1 │ │ ├── format │ │ │ └── error.sql │ │ ├── format_call_stack.plsql │ │ ├── format_error_backtrace.plsql │ │ ├── format_error_stack.plsql │ │ ├── name_resolve.sql │ │ └── time.plsql │ ├── xa │ │ ├── session_01.sql │ │ ├── session_02.sql │ │ ├── session_03.sql │ │ └── setup.sql │ └── xmlget │ │ └── getxml.sql ├── dynamic-performance-views │ ├── active │ │ └── session_history │ │ │ ├── did-user-exec.sql │ │ │ ├── minutes_covered.sql │ │ │ ├── session_states.sql │ │ │ └── trace-session.sql │ ├── alert_types │ │ └── object_types.sql │ ├── archive │ │ └── dest │ │ │ └── show-destinations.sql │ ├── ash_info │ │ └── show.sql │ ├── bh │ │ └── compare-with_Buffer_Cache_Size.sql │ ├── controlfile │ │ ├── record_section │ │ │ └── type.sql │ │ └── show.sql │ ├── database │ │ └── columns.sql │ ├── database_incarnation │ │ └── show.sql │ ├── database_key_info │ │ └── show.sql │ ├── datafile │ │ ├── README.md │ │ └── header │ │ │ └── last-checkpoint.sql │ ├── db_transportable_platform │ │ ├── README.md │ │ └── show.sql │ ├── dbfile │ │ └── compare-to-datafile.sql │ ├── dblink │ │ └── README.md │ ├── diag │ │ └── trace_file │ │ │ └── contents │ │ │ └── file_name-function_name.sql │ ├── enqueue_lock │ │ └── compare-to-lock.sql │ ├── enqueue_statistics │ │ └── cum_wait_time.sql │ ├── event_name │ │ ├── distinct-parameters.sql │ │ └── name_per_class.sql │ ├── file_histogram │ │ └── pivot.sql │ ├── filemetric │ │ └── show.sql │ ├── filemetric_history │ │ └── pivot.sql │ ├── fixed │ │ ├── table │ │ │ ├── v-and-gv-views.sql │ │ │ └── x.sql │ │ └── view_definition │ │ │ └── find-x$-tables.sql │ ├── hm │ │ └── check │ │ │ └── name-description.sql │ ├── indexed_fixed_column │ │ └── column_name.sql │ ├── iostat │ │ ├── file │ │ │ └── filetypes.sql │ │ └── function │ │ │ └── function_names.sql │ ├── java │ │ └── library_cache_memory │ │ │ └── namespaces.sql │ ├── latch │ │ ├── holder │ │ │ └── show.sql │ │ └── show-statistics.sql │ ├── license │ │ └── show.sql │ ├── lock │ │ ├── general-information.sql │ │ └── type │ │ │ └── overview.sql │ ├── locked_object │ │ └── show.sql │ ├── memory │ │ └── dynamic_components │ │ │ └── show.sql │ ├── metric │ │ ├── history │ │ │ └── phys-read-write.sql │ │ └── name │ │ │ └── show.sql │ ├── mystat │ │ └── show.sql │ ├── nls │ │ ├── parameters │ │ │ └── names.sql │ │ └── valid_values │ │ │ └── show.sql │ ├── open_cursor │ │ ├── cursor_types.sql │ │ └── own-sessions-open-cursors.sql │ ├── option │ │ └── parameter.sql │ ├── parameter │ │ ├── README.md │ │ ├── names.sql │ │ ├── parameter_notes.sql │ │ ├── parameter_view.sql │ │ └── valid_values │ │ │ └── pivot.sql │ ├── parameter_valid_values │ │ └── pivot.sql │ ├── pq │ │ ├── sesstat │ │ │ └── show-statistics.sql │ │ ├── slave │ │ │ └── show.sql │ │ ├── sysstat │ │ │ └── statistic-names.sql │ │ └── tqstat │ │ │ └── show.sql │ ├── process │ │ └── joins.sql │ ├── process_memory │ │ ├── categories.sql │ │ └── show_plsql_usage.sql │ ├── px │ │ ├── process_sysstat │ │ │ └── in_use-available-highwater.sql │ │ └── session │ │ │ ├── group-by-qcsid.sql │ │ │ └── joins.sql │ ├── reserved_words │ │ └── keywords.sql │ ├── rman │ │ ├── backup_type │ │ │ └── show.sql │ │ ├── compression_algorithm │ │ │ └── show.sql │ │ └── configuration │ │ │ └── show.sql │ ├── segment_statistics │ │ ├── names.sql │ │ └── simple-test.sql │ ├── sess │ │ ├── io │ │ │ └── own-sessions-statistics.sql │ │ └── time_model │ │ │ └── stat_names.sql │ ├── session │ │ ├── .gitignore │ │ ├── connect_info │ │ │ └── own-sessions-values.sql │ │ ├── cursor_cache │ │ │ └── show.sql │ │ ├── distinct_values.sql │ │ ├── event │ │ │ └── join-session.sql │ │ ├── find-my-interesting-sessions.sql │ │ ├── joinable.sql │ │ ├── joins.sql │ │ ├── module-action.sql │ │ ├── module_hash.sql │ │ ├── pdml-pddl-pq_status.sql │ │ ├── programs.sql │ │ ├── set-action-etc.cs │ │ └── wait │ │ │ └── show-waits.sql │ ├── sesstat │ │ ├── join-session.sql │ │ └── show-statistics.sql │ ├── sga │ │ ├── dynamic_componentes │ │ │ ├── components.sql │ │ │ └── usage.sql │ │ └── names.sql │ ├── sort │ │ └── usage │ │ │ └── show.sql │ ├── sql │ │ ├── area │ │ │ ├── address-unique.sql │ │ │ ├── memory-usage.sql │ │ │ ├── parsed-by-user.sql │ │ │ └── sql_id-unique.sql │ │ ├── bind │ │ │ ├── capture │ │ │ │ └── ex.sql │ │ │ └── metadata │ │ │ │ └── ex.sql │ │ ├── command │ │ │ ├── count-nouns.sql │ │ │ ├── count-verbs.sql │ │ │ ├── names.sql │ │ │ ├── only-verb-statements.sql │ │ │ └── verb_noun_view.sql │ │ ├── cursor │ │ │ └── join-sqlarea.sql │ │ ├── diff-sql_sqlarea.sql │ │ ├── feature │ │ │ └── hierarchy │ │ │ │ └── select-recursively.sql │ │ ├── hint │ │ │ ├── hints.sql │ │ │ └── join-feature-hierarchy.sql │ │ ├── monitor │ │ │ └── select.sql │ │ ├── plan │ │ │ ├── column-position-id-eq-0.sql │ │ │ ├── monitor │ │ │ │ └── select-simple.sql │ │ │ └── show-sql_id.sql │ │ ├── shared │ │ │ └── cursor │ │ │ │ └── columns.sql │ │ ├── statistics.sql │ │ ├── text │ │ │ └── tq84.sql │ │ ├── text_with_newlines │ │ │ ├── listagg.sql │ │ │ └── sqlid-to-stmt.sql │ │ └── workarea │ │ │ └── select.sql │ ├── statistics_level │ │ └── show.sql │ ├── statname │ │ └── class_name.sql │ ├── sys_time_model │ │ ├── order-by-value.sql │ │ └── stat_names.sql │ ├── sysmetric │ │ └── show.sql │ ├── sysstat │ │ └── names.sql │ ├── system │ │ ├── event │ │ │ └── order-by-time_waited.sql │ │ └── wait_class │ │ │ └── wait_classes.sql │ ├── tablespace │ │ └── show.sql │ ├── timezone │ │ ├── file │ │ │ └── show.sql │ │ └── names │ │ │ └── abbreviations.sql │ ├── transaction │ │ ├── join_session.sql │ │ └── show-transactions.sql │ ├── transportable_platform │ │ ├── README.md │ │ └── show.sql │ └── version │ │ └── select.sql ├── htf │ ├── .gitignore │ ├── create-simple-html-document.sql │ └── escape_sc.sql ├── types │ └── any │ │ └── passAnyObject │ │ ├── passAnyObject.sql │ │ ├── run.sql │ │ └── types.sql └── utl │ ├── call_stack │ ├── example-01.sql │ └── nested.sql │ ├── compress │ └── README.md │ ├── file │ ├── create_file.plsql │ ├── delete_created_file.plsql │ ├── read_created_file.plsql │ └── read_created_file_until_end.plsql │ ├── i18n │ ├── get_common_time_zones.plsql │ ├── get_local_languages.plsql │ ├── get_local_territories.plsql │ └── unescape_reference.sql │ ├── ident │ └── schow_constants.sql │ ├── mail │ └── send_mail.plsql │ ├── match │ └── test.sql │ ├── raw │ ├── cast_to_varchar2 │ ├── convert.plsql │ └── xrange.plsql │ ├── smtp │ ├── README.md │ ├── attachment.plsql │ ├── auth.plsql │ └── send_mail.plsql │ └── xml │ └── parse │ ├── grant-execute.sql │ ├── parse-query.sql │ └── utl_xml_wrapper.sql ├── PL-SQL ├── CollectionTypes │ ├── IndexByTables-aka-AssociativeArrays │ │ ├── exists.plsql │ │ └── iterate_over.plsql │ ├── NestedTables │ │ ├── count.plsql │ │ ├── select_cardinality.sql │ │ ├── select_from_table_table.sql │ │ ├── select_from_the.sql │ │ ├── select_from_the_the.sql │ │ └── where_member_of.sql │ ├── intro.sql │ ├── return-table-from-function │ │ ├── bulk-collect.sql │ │ ├── clean-up.sql │ │ ├── create-function.sql │ │ ├── create-record-type.sql │ │ ├── create-table-type.sql │ │ ├── select-from-function-2.sql │ │ └── select-from-function.sql │ └── set_operations.sql ├── accessible_by │ └── example-01.plsql ├── authid │ ├── create_object.sql │ ├── example-01 │ │ ├── _run.sql │ │ ├── clean-up.sql │ │ ├── create-users.sql │ │ ├── exec-read_t_current_user.sql │ │ ├── exec-read_u_definer.sql │ │ ├── grant-execute-to-proc-user.sql │ │ ├── proc-owner-log_msg.sql │ │ ├── proc-owner-read_t_current_user.sql │ │ ├── proc-owner-read_u_definer.sql │ │ ├── proc-owner-tables.sql │ │ └── proc-user-tables.sql │ └── example_01.sql ├── block │ └── exception-handler │ │ └── sqlerrm-sqlcode │ │ └── nested │ │ └── run.sql ├── blocks │ ├── error_in_declare.plsql │ └── nested_proc_with_same_name.plsql ├── bulk_collect │ ├── group_by │ │ ├── multiple_layers.plsql │ │ └── test_01.plsql │ └── no_data_found.plsql ├── case │ └── which_line_reports_error.plsql ├── compilation │ └── conditional │ │ ├── ErrorDirective.plsql │ │ ├── README.md │ │ ├── reuse_settings.plsql │ │ ├── show_settings.plsql │ │ └── test_01.sql ├── cursor │ ├── cursor-attributes.sql │ ├── for_rec_in_cur.sql │ ├── open_close.sql │ ├── rowcount.sql │ └── while_found.sql ├── exception │ ├── pragma_init_with_same_number │ │ ├── catcher.pkb │ │ ├── catcher.pks │ │ ├── thrower_1.pkb │ │ ├── thrower_1.pks │ │ ├── thrower_2.pkb │ │ └── thrower_2.pks │ ├── raise_application_error.plsql │ ├── thrower_and_catcher │ │ ├── catcher.pkb │ │ ├── catcher.pks │ │ ├── thrower.pkb │ │ └── thrower.pks │ └── when_X_or_Y │ │ ├── install.sql │ │ └── run.sql ├── execute_immediate │ ├── into.plsql │ ├── into_rowtype.plsql │ ├── select-returning-values.plsql │ ├── using_in_out.plsql │ ├── using_in_out_nested_type_extend.plsql │ ├── using_out.plsql │ ├── using_out_2.plsql │ └── using_out_nested_type.plsql ├── forall │ └── compare_time.sql ├── function-procedure │ ├── deterministic │ │ ├── cache-result │ │ │ ├── _run.sql │ │ │ ├── clean-up.sql │ │ │ ├── func.sql │ │ │ ├── log-table.sql │ │ │ ├── select-count-from-log-table.sql │ │ │ └── select.sql │ │ └── where-clause │ │ │ ├── _run.sql │ │ │ ├── pkg.sql │ │ │ ├── select.sql │ │ │ └── tab.sql │ ├── overhead-in-SQL │ │ └── where │ │ │ ├── _run.sql │ │ │ ├── clean-up.sql │ │ │ ├── funcs.sql │ │ │ ├── select-count.sql │ │ │ ├── select-deterministic.sql │ │ │ ├── select-func.sql │ │ │ ├── select-local-deterministic.sql │ │ │ ├── select-local.sql │ │ │ ├── select-result_cache.sql │ │ │ ├── select-where.sql │ │ │ └── table.sql │ └── sql_macro │ │ ├── basic-example │ │ ├── data.sql │ │ ├── func.sql │ │ └── select.sql │ │ └── parameters │ │ ├── create-table.sql │ │ ├── random-table-select.sql │ │ ├── random-table.sql │ │ ├── tabN-anonymous-block.sql │ │ ├── tabN-select-1.sql │ │ └── tabN.sql ├── loop │ ├── continue.plsql │ ├── for_in_x_x.plsql │ ├── reverse.plsql │ └── select_stmt_as_string.plsql ├── pragma │ ├── autonomous_transaction │ │ └── uncommited.plsql │ ├── deprecate │ │ ├── pkg_a.pkb │ │ ├── pkg_a.pks │ │ ├── pkg_b.pkb │ │ ├── pkg_b.pks │ │ ├── recompile.sql │ │ ├── show-errors.sql │ │ └── user_errors.sql │ └── udf.sql └── statements │ └── pipe_row │ └── do.sql ├── README.md ├── SQL ├── README.md ├── _examples │ └── lendings │ │ ├── _run.sql │ │ ├── active-months.sql │ │ ├── all-months.sql │ │ ├── data.sql │ │ ├── group-by.sql │ │ ├── model.sql │ │ ├── table.sql │ │ └── unpivot.sql ├── _nouns │ └── system │ │ └── alter │ │ └── dump │ │ ├── dump_block_from_rowid-test.sql │ │ └── dump_block_from_rowid.sql ├── alter │ ├── package │ │ └── compile_plsql_ccflags.sql │ └── session │ │ ├── close-open-database-link.sql │ │ ├── commit-in-procedure │ │ ├── _run.sql │ │ ├── exec.sql │ │ ├── pkg.sql │ │ └── tab.sql │ │ └── time_zone.sql ├── analyze │ └── table │ │ └── list-chained_rows.sql ├── cursors │ └── ref_cursor_from_string.plsql ├── datatypes │ ├── boolean │ │ └── select.sql │ ├── interval │ │ └── some.sql │ ├── lob │ │ ├── ORA-06502.sql │ │ └── clob │ │ │ └── to-lines │ │ │ ├── _run.sql │ │ │ ├── data.sql │ │ │ ├── select.sql │ │ │ └── table.sql │ ├── number │ │ └── table.sql │ ├── raw │ │ └── rawtohex.sql │ ├── rowid │ │ └── select.sql │ ├── timestamp │ │ ├── subtract.sql │ │ └── timezone-01.sql │ └── varchar2 │ │ ├── byte-vs-char │ │ └── script.sql │ │ └── null │ │ ├── concatenate.sql │ │ ├── create-table.sql │ │ ├── select-eq-empty-string.sql │ │ └── select-is-null.sql ├── delete │ └── subquery.sql ├── functions │ ├── between.sql │ ├── conversion │ │ ├── rowid-to-varchar2.sql │ │ └── validate_conversion.sql │ ├── date_related │ │ ├── add_month_vs_interval_month.sql │ │ ├── dbtimezone.sql │ │ ├── numtoyminterval.sql │ │ ├── seconds_to_hh24-mi-ss.sql │ │ ├── sessiontimezone.sql │ │ ├── sys_extract_utc.sql │ │ └── systimestamp.sql │ ├── interval_related │ │ └── numto_interval.sql │ ├── json │ │ └── objectagg │ │ │ └── intro.sql │ ├── math │ │ ├── power.sql │ │ └── width_bucket.sql │ ├── multiset │ │ ├── except.sql │ │ ├── intersect.sql │ │ ├── powermultiset_by_cardinality.sql │ │ └── union.sql │ ├── null_related │ │ ├── lnnvl.sql │ │ ├── nullif.sql │ │ ├── nvl2.sql │ │ ├── nvl_not_lazy_evaluated.sql │ │ └── sys_op_map_nonnull.sql │ ├── regr │ │ └── go.sql │ ├── regular_expressions │ │ ├── regexp_count.sql │ │ ├── regexp_like.plsql │ │ ├── regexp_replace.sql │ │ ├── regexp_substr │ │ │ ├── extract-3rd-substring.sql │ │ │ ├── extract-between-delimiters.sql │ │ │ └── extract-number.sql │ │ └── word_boundaries.sql │ ├── strings │ │ ├── joining.sql │ │ └── repeating_strings.sql │ ├── sys_context │ │ └── userenv_find-own-session.sql │ ├── sys_guid.sql │ ├── text │ │ └── substr │ │ │ ├── three-parameters.sql │ │ │ └── two-parameters.sql │ ├── to_lob.sql │ ├── type-conversion │ │ ├── format-models │ │ │ ├── day-of-week.sql │ │ │ ├── number.sql │ │ │ └── spell-julian-day.sql │ │ └── to │ │ │ └── number │ │ │ ├── default-on-conversion-error.sql │ │ │ └── nls-param.sql │ └── xml │ │ └── xmltable │ │ └── select.xmltype.dual.sql ├── grant │ ├── _run.sql │ ├── table-create.sql │ ├── table-select.sql │ ├── table-update.sql │ ├── users-create.sql │ └── users-drop.sql ├── insert │ ├── append_hint_ora_12838.sql │ ├── insert_all │ │ ├── conditional.sql │ │ └── english-german.sql │ ├── insert_all_01.sql │ └── log_errors_into │ │ ├── primary_key.sql │ │ └── temporary_tables.sql ├── merge │ ├── merge_on_condition.plsql │ └── unique_constraint_violated.sql ├── rename │ └── statistics.sql ├── select │ ├── 12c │ │ ├── lateral.sql │ │ ├── row_limiting_clause │ │ │ ├── fetch_first_n_percent_rows_only.sql │ │ │ ├── fetch_first_n_rows_only.sql │ │ │ └── offset_n_rows_fetch_next_m_rows.sql │ │ └── with_function.sql │ ├── aggregate │ │ ├── approx_count_distinct.sql │ │ ├── distinct.sql │ │ ├── listagg │ │ │ └── clob │ │ │ │ ├── v1 │ │ │ │ ├── body.sql │ │ │ │ ├── func.sql │ │ │ │ ├── spec.sql │ │ │ │ └── test.sql │ │ │ │ └── v2 │ │ │ │ ├── body.sql │ │ │ │ ├── func.sql │ │ │ │ ├── spec.sql │ │ │ │ └── test.sql │ │ ├── median.sql │ │ ├── nested │ │ │ ├── create-table.sql │ │ │ ├── run_.sql │ │ │ ├── select-nested.sql │ │ │ └── select.sql │ │ ├── nulls.sql │ │ └── stats_mode.sql │ ├── analytical_functions │ │ ├── cume_dist.sql │ │ ├── cumulative_sum.sql │ │ ├── cumulative_value_at_date.sql │ │ ├── find-free-time-in-calendar.sql │ │ ├── find_duplicate_newest.sql │ │ ├── first_value.sql │ │ ├── group_by.sql │ │ ├── keep_dense_rank │ │ │ ├── column_values_of_row_with_max_value.sql │ │ │ └── group_by_vs_over.sql │ │ ├── lag-vs-lead.sql │ │ ├── nth_value.sql │ │ ├── percent_rank.sql │ │ ├── range_between.sql │ │ ├── ranking │ │ │ └── ratio_to_report │ │ │ │ └── spending.sql │ │ ├── row_number-vs-rank-vs-dense_rank.sql │ │ └── windowing_clause │ │ │ ├── count.sql │ │ │ └── default.sql │ ├── distinct │ │ ├── distinct_01.sql │ │ └── distinct_with_parantheses.sql │ ├── group_by │ │ ├── cube │ │ │ ├── 2dim.sql │ │ │ └── 2dim_fill_holes.sql │ │ └── listagg.sql │ ├── hierarchical_queries │ │ ├── common_table_expressions │ │ │ ├── cycle.sql │ │ │ ├── ex_01.sql │ │ │ ├── search_depth_first.sql │ │ │ └── two_tables.sql │ │ └── start-with_connect-by │ │ │ ├── ancestor-descendant │ │ │ ├── clean-up.sql │ │ │ ├── create-table.sql │ │ │ ├── insert-data.sql │ │ │ ├── procedure.plsql │ │ │ └── try.sql │ │ │ ├── nocycle │ │ │ ├── clean-up.sql │ │ │ ├── create-table.sql │ │ │ ├── directed-graph.txt │ │ │ ├── insert-edges.sql │ │ │ ├── nodes-reachable-from-A-nocycle.sql │ │ │ ├── nodes-reachable-from-A.sql │ │ │ └── nodes-reachable-from-F.sql │ │ │ ├── pruning-branches │ │ │ ├── clean-up.sql │ │ │ ├── create-table.sql │ │ │ ├── insert-data.sql │ │ │ └── select-data.sql │ │ │ └── recursive-additions │ │ │ ├── clean-up.sql │ │ │ ├── create-table.sql │ │ │ ├── insert-data.sql │ │ │ └── select-hierarchically.sql │ ├── in │ │ └── columns_of_outer_statement.sql │ ├── join │ │ ├── apply │ │ │ └── cross │ │ │ │ └── ex-1 │ │ │ │ ├── cleanup.sql │ │ │ │ ├── data.sql │ │ │ │ ├── explain-plan-join.sql │ │ │ │ ├── explain-plan.sql │ │ │ │ ├── select.sql │ │ │ │ └── tables.sql │ │ ├── full_outer_join │ │ │ ├── 01_simple.sql │ │ │ ├── 02_one_table.sql │ │ │ └── outer_join_and_left_join.sql │ │ └── outer_join │ │ │ ├── 3_tables.sql │ │ │ ├── left_left.sql │ │ │ ├── outer_join_01.sql │ │ │ ├── outer_join_02.sql │ │ │ ├── partitioned_outer_join.sql │ │ │ ├── pesky_outer_join │ │ │ ├── README.md │ │ │ ├── inkscape.svgz │ │ │ └── script.sql │ │ │ └── pits_test.sql │ ├── match_recognize │ │ ├── find-consecutive-rows │ │ │ ├── all.sql │ │ │ ├── data.sql │ │ │ └── one-row-per-match.sql │ │ ├── find-foo-bar-baz.sql │ │ ├── find-sequence-of-same.sql │ │ ├── find-three-in-a-row.sql │ │ └── stock-price │ │ │ ├── data.sql │ │ │ ├── select.sql │ │ │ └── visualization.sql │ ├── misc │ │ ├── ascii-histogram.sql │ │ ├── csv_to_columns │ │ │ ├── col-format.sql │ │ │ ├── create-table.sql │ │ │ ├── drop-table.sql │ │ │ ├── insert-values.sql │ │ │ ├── run-in-sqlplus.sql │ │ │ └── select.sql │ │ └── sample │ │ │ └── select-approx-5-percent.sql │ ├── model │ │ └── intro │ │ │ ├── _run.sql │ │ │ ├── add-record.sql │ │ │ ├── condition.sql │ │ │ ├── err-00984.sql │ │ │ ├── err-32611.sql │ │ │ ├── err-32613.sql │ │ │ ├── err-32622.sql │ │ │ ├── minimal.sql │ │ │ ├── test-data.sql │ │ │ ├── update-col-3.sql │ │ │ ├── update-with-previous.sql │ │ │ └── use-dimension-value.sql │ ├── order_by │ │ └── test_01.sql │ ├── partition_extension_clause │ │ ├── README.md │ │ └── select_from_partition.sql │ ├── pivot │ │ ├── test_02.sql │ │ ├── test_03.sql │ │ ├── two_aggregates.sql │ │ └── un │ │ │ ├── ex-01.sql │ │ │ └── visualized.png │ ├── regression │ │ └── regr_slope.sql │ ├── set_operators │ │ ├── minus_01.sql │ │ └── precedence.sql │ ├── skip_locked │ │ ├── README.md │ │ ├── call_process_next_item.sql │ │ ├── create_tab.sql │ │ ├── insert_initial.sql │ │ ├── install.sql │ │ ├── process_items.bat │ │ └── process_next_item.plsql │ ├── top_n │ │ ├── 12c-30-pct.sql │ │ ├── 12c-first-3-rows-with-ties.sql │ │ ├── 12c-first-3-rows.sql │ │ ├── 12c-first-row.sql │ │ ├── 12c-offset-4-next-2.sql │ │ ├── clean-up.sql │ │ ├── data.sql │ │ ├── row_number-paging.sql │ │ ├── rownum-inner-query.sql │ │ ├── rownum-paging.sql │ │ └── rownum-wrong.sql │ └── with │ │ └── inline-function │ │ └── example-01.sql ├── statement │ └── nouns │ │ ├── session │ │ └── alter │ │ │ └── set │ │ │ └── current_schema │ │ │ └── execute-immediate │ │ │ ├── _run.sql │ │ │ ├── clean-up.sql │ │ │ ├── create-users.sql │ │ │ ├── pkg-owner.sql │ │ │ └── pkg-user.sql │ │ └── system │ │ └── alter │ │ └── kill-session │ │ └── kill_my_session.sql ├── update │ └── returning_into.sql └── where_in.sql ├── SQLLoader ├── .gitignore ├── README.md ├── binary-data │ ├── Binary-code.jpg │ ├── Eschenbergturm.jpg │ ├── Oracle-Buildings.jpg │ ├── all.sql │ ├── create_table.sql │ ├── create_table_long_raw.sql │ ├── file-index.dat │ ├── load.ctl │ ├── load_long_raw_Binary-code.ctl │ ├── load_long_raw_Eschenbergturm.ctl │ └── load_long_raw_Oracle-Buildings.ctl ├── ex-case-when │ ├── create_table.sql │ ├── load.ctl │ └── load.dat ├── ex-express-optionally_enclosed_by │ ├── create_table.sql │ ├── import_data.bat │ └── some.dat ├── ex_02 │ ├── all.sql │ ├── create_table.sql │ ├── load_2.ctl │ ├── load_2.dat │ └── readme.txt ├── ex_03 │ ├── all.sql │ ├── create_table.sql │ ├── load_3.ctl │ ├── load_3.dat │ └── readme.txt ├── ex_04 │ ├── all.sql │ ├── create_table.sql │ ├── load_4.ctl │ ├── load_4.dat │ └── readme.txt ├── ex_05 │ ├── all.sql │ ├── create_table.sql │ ├── load_5.ctl │ └── load_5.dat ├── ex_06 │ ├── all.sql │ ├── create_table.sql │ ├── load_6.ctl │ ├── load_6.dat │ └── load_6_ok.ctl ├── ex_07 │ ├── all.sql │ ├── create_table.sql │ ├── load_7.ctl │ └── load_7.dat ├── ex_08 │ ├── all.sql │ ├── create_table.sql │ ├── load_8.csv │ └── load_8.ctl ├── ex_09 │ ├── README.md │ ├── all.sql │ ├── create_table.sql │ ├── load_09.ctl │ └── load_09.dat ├── ex_10 │ ├── all.sql │ ├── create_func.plsql │ ├── create_table.sql │ ├── data.csv │ └── load.ctl ├── ex_11 │ ├── all.sql │ ├── create_table.sql │ ├── some.dat │ ├── with_trailing_nullcols.ctl │ └── without_trailing_nullcols.ctl ├── ex_12_skip-columns │ ├── all.sql │ ├── create_table.sql │ ├── data.csv │ └── load.ctl ├── ex_13_make-unique-indexes-unusable │ ├── create_table.sql │ ├── tab_with_pk.ctl │ └── tab_with_pk.dat └── fixed-width │ ├── all.sql │ ├── create_table.sql │ ├── load_1.ctl │ └── load_1.dat ├── SQLPlus ├── attribute │ └── attribute.sql ├── break │ ├── on-skip.sql │ └── on.sql ├── column │ └── width.sql ├── echo │ └── script.sql ├── new-value │ ├── multiple-records.sql │ └── one-record.sql ├── set │ └── exitcommit │ │ ├── exit_commit_off.sql │ │ ├── exit_commit_on.sql │ │ ├── run.bat │ │ └── select.sql ├── start │ └── test_depth_limit.sql ├── store │ ├── .gitignore │ ├── README.md │ └── store_into_stored.sql └── whenever │ └── sqlerror │ └── exit.sql ├── UsersRoles ├── CloneUser │ ├── .gitignore │ ├── create_clone_script.sql │ └── create_schema.sql └── Profiles │ └── password_verify_function.sql ├── errors └── ORA │ ├── 02266_unique-primary-keys-in-table-referenced-by-enabled-foreign-keys │ └── partition-in-hierarchical-table.sql │ ├── 02449_unique-primary-keys-in-table-referenced-by-foreign-keys │ └── go.sql │ ├── 06512_at-line │ └── show-offending-line │ │ ├── _run.sql │ │ ├── body.sql │ │ ├── error-backtrace.sql │ │ ├── exec-01.sql │ │ ├── show-code-line.sql │ │ ├── spec.sql │ │ └── sqlerrm.sql │ └── 14402_updating-partition-key-column-would-cause-a-partition-change │ └── show_error.sql ├── expimp ├── .gitignore ├── from_to_schema │ ├── all.sql │ ├── create_schemas.sql │ ├── create_table.sql │ └── select.sql ├── schema │ ├── .gitignore │ ├── connect_with_admin_right.sql │ ├── create_schema.sql │ ├── create_user_script.sql │ ├── drop_schema.sql │ └── run.sql └── table_with_trigger │ ├── 01.sql │ ├── 01_table.sql │ └── 01_trigger.sql ├── init-parameters ├── README.md └── nls │ └── sort-comp │ └── eq.sql ├── logical-structures └── segment │ └── header │ └── dump │ └── go.sql └── misc └── ODCI ├── aggregation └── ex-01 │ ├── _run.sql │ ├── clean-up.sql │ ├── func.sql │ ├── test-select.sql │ ├── test-table.sql │ ├── type-body.sql │ └── type.sql └── table └── multiplication ├── body.plsql ├── img └── result.png └── spec.plsql /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/_run.sql: -------------------------------------------------------------------------------- 1 | @create-cluster.sql 2 | @create-index.sql 3 | @create-tables.sql 4 | @insert.sql 5 | @data-dictionary.sql 6 | @db-blocks.sql 7 | @plan.sql 8 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/create-cluster.sql: -------------------------------------------------------------------------------- 1 | create cluster tq84_cluster( 2 | id integer 3 | ); 4 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/create-index.sql: -------------------------------------------------------------------------------- 1 | create index tq84_cluster_ix on cluster tq84_cluster; 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/create-tables.sql: -------------------------------------------------------------------------------- 1 | create table tq84_cluster_parent ( 2 | id integer primary key, 3 | dt date 4 | ) 5 | cluster tq84_cluster(id); 6 | 7 | create table tq84_cluster_child ( 8 | id integer references tq84_cluster_parent, 9 | tx varchar2(20) 10 | ) 11 | cluster tq84_cluster(id); 12 | 13 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/data-dictionary.sql: -------------------------------------------------------------------------------- 1 | select * from user_clusters where cluster_name = 'TQ84_CLUSTER'; 2 | select * from user_clu_columns where cluster_name = 'TQ84_CLUSTER'; 3 | 4 | -------------------------------------------------------------------------------- /DatabaseObjects/Clusters/intro/drop.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_cluster_child; 2 | drop table tq84_cluster_parent; 3 | drop cluster tq84_cluster; 4 | -------------------------------------------------------------------------------- /DatabaseObjects/Database-Links/function.sql: -------------------------------------------------------------------------------- 1 | select 2 | func_name @ link_name('param one', 'param two') 3 | from 4 | dual; 5 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/own-namespace.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- The name of an index is in a different namespace thant 3 | -- the table. So, the following two statements 4 | -- cause no error: 5 | -- 6 | 7 | create table tq84_foo (a number, b number); 8 | create index tq84_foo on tq84_foo(a); 9 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/create-local-index.sql: -------------------------------------------------------------------------------- 1 | create index tq84_part_local_ix on tq84_part_ix_test (val_2) 2 | local ( 3 | partition p_lt_10000 ( 4 | subpartition sp_foo, 5 | subpartition sp_bar, 6 | subpartition sp_baz 7 | ) 8 | ); 9 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/create-ordinary-index.sql: -------------------------------------------------------------------------------- 1 | create index tq84_part_ordinary_ix on tq84_part_ix_test (val_1); 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/gather-stats.sql: -------------------------------------------------------------------------------- 1 | exec dbms_stats.gather_table_stats(user, 'tq84_part_ix_test'); 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/insert.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_part_ix_test values (10001, 'foo', 11, 13, 17); 2 | insert into tq84_part_ix_test values (10002, 'bar', 23, 29, 31); 3 | insert into tq84_part_ix_test values (20003, 'baz', 37, 39, 41); 4 | 5 | commit; 6 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/user_ind_partitions.sql: -------------------------------------------------------------------------------- 1 | select 2 | index_name, 3 | partition_name, 4 | global_stats, 5 | composite, 6 | status 7 | from 8 | user_ind_partitions 9 | where 10 | index_name in ('TQ84_PART_LOCAL_IX', 'TQ84_PART_GLOBAL_IX'); 11 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/user_ind_statistics.sql: -------------------------------------------------------------------------------- 1 | select 2 | object_type , 3 | index_name , 4 | partition_name , subpartition_name 5 | partition_position, subpartition_position, 6 | num_rows, 7 | global_stats, 8 | last_analyzed, 9 | stale_stats 10 | from 11 | user_ind_statistics 12 | where 13 | table_name = 'TQ84_PART_IX_TEST'; 14 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/user_ind_subpartitions.sql: -------------------------------------------------------------------------------- 1 | select 2 | index_name, 3 | partition_name, 4 | subpartition_name, 5 | global_stats, 6 | status 7 | from 8 | user_ind_subpartitions 9 | where 10 | index_name in ('TQ84_PART_LOCAL_IX', 'TQ84_PART_GLOBAL_IX'); 11 | -------------------------------------------------------------------------------- /DatabaseObjects/Indexes/partitioned/local/vs-ordinary/user_indexes.sql: -------------------------------------------------------------------------------- 1 | select 2 | index_name, 3 | partitioned, 4 | status 5 | from 6 | user_indexes 7 | where 8 | index_name in ('TQ84_PART_LOCAL_IX', 'TQ84_PART_GLOBAL_IX'); 9 | -------------------------------------------------------------------------------- /DatabaseObjects/MaterializedViews/on_prebuilt_table_iot.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/DatabaseObjects/MaterializedViews/on_prebuilt_table_iot.sql -------------------------------------------------------------------------------- /DatabaseObjects/README.md: -------------------------------------------------------------------------------- 1 | See ../Installed/data-dictionary/objects/object_type.sql 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Sequences/sequence.sql: -------------------------------------------------------------------------------- 1 | create sequence tq84_sequence 2 | start with 1 3 | increment by 1 4 | nocache 5 | nocycle; 6 | 7 | select tq84_sequence.nextval from dual; 8 | 9 | select * from user_sequences where sequence_name = 'TQ84_SEQUENCE'; 10 | 11 | drop sequence tq84_sequence; 12 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/12c/identity_start_with.sql: -------------------------------------------------------------------------------- 1 | create table tq84_identity ( 2 | id number generated as identity start with 10 increment by 3 primary key, 3 | txt varchar2(10) 4 | ); 5 | 6 | 7 | insert into tq84_identity(txt) values ('ten' ); 8 | insert into tq84_identity(txt) values ('thirteen'); 9 | insert into tq84_identity(txt) values ('sixtenn' ); 10 | 11 | select * from tq84_identity; 12 | 13 | drop table tq84_identity purge; 14 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/AlterTable/add_column.sql: -------------------------------------------------------------------------------- 1 | create table tq84_table ( 2 | col_1 number, 3 | col_2 date 4 | ); 5 | 6 | desc tq84_table; 7 | 8 | insert into tq84_table values (1, sysdate); 9 | 10 | alter table tq84_table add ( col_3 varchar2(10)); 11 | alter table tq84_table add ( col_4 number, col_5 number); 12 | alter table tq84_table add ( col_6 number default 7); 13 | 14 | desc tq84_table; 15 | 16 | select * from tq84_table; 17 | 18 | drop table tq84_table purge; 19 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/AlterTable/drop_column.sql: -------------------------------------------------------------------------------- 1 | create table tq84_table ( 2 | col_1 number, 3 | col_2 date, 4 | col_3 varchar2(10), 5 | col_4 varchar2(10) 6 | ); 7 | 8 | insert into tq84_table values (1, sysdate, 'x', 'y'); 9 | 10 | alter table tq84_table drop column col_1; 11 | alter table tq84_table drop (col_2, col_3); 12 | 13 | desc tq84_table; 14 | 15 | select * from tq84_table; 16 | 17 | drop table tq84_table purge; 18 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/AlterTable/rename_column.sql: -------------------------------------------------------------------------------- 1 | create table tq84_table ( 2 | col_1 number, 3 | col_2 date 4 | ); 5 | 6 | insert into tq84_table values (1, sysdate); 7 | 8 | alter table tq84_table rename column col_1 to nm; 9 | alter table tq84_table rename column col_2 to dt; 10 | 11 | desc tq84_table; 12 | 13 | select * from tq84_table; 14 | 15 | drop table tq84_table purge; 16 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/AttributeClustering/user_tables.sql: -------------------------------------------------------------------------------- 1 | create table tq84_clustering ( 2 | id number primary key, 3 | flag_1 varchar2(2) not null, 4 | flag_2 varchar2(2) not null, 5 | col_1 varchar2(20), 6 | col_2 varchar2(20), 7 | col_3 varchar2(50) 8 | ) 9 | clustering 10 | by linear order ( 11 | flag_1, 12 | flag_2 13 | ); 14 | 15 | select * from user_tables where clustering = 'YES'; 16 | 17 | drop table tq84_clustering; 18 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/ILM/add-policy.sql: -------------------------------------------------------------------------------- 1 | create table tq84_ilm_policy ( 2 | id number primary key, 3 | col_1 varchar2(10), 4 | col_2 varchar2(10) 5 | ) 6 | ilm add policy row store compress advanced segment after 3 days of no modification 7 | ; 8 | 9 | -- Alternatively, with alter table: 10 | -- 11 | -- alter table tq84_ilm_policy 12 | -- ilm add policy row store compress advanced segment after 3 days of no modification; 13 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/Partitions/distribution-techniques/composite/subpartition-template/interval-list.sql: -------------------------------------------------------------------------------- 1 | create table tq84_interval_list ( 2 | num number, 3 | txt varchar2(3), 4 | val number 5 | ) 6 | partition by range (num) interval (100) 7 | subpartition by list (txt) 8 | subpartition template ( 9 | subpartition sp_foo values ('foo'), 10 | subpartition sp_bar values ('bar'), 11 | subpartition sp_baz values ('baz') 12 | ) 13 | ( 14 | partition p_init values less than (100) 15 | ); 16 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/Partitions/hash_partitioning.sql: -------------------------------------------------------------------------------- 1 | create table tq84_hash_partition ( 2 | id number, 3 | txt varchar2(10) 4 | ) 5 | partition by hash (txt) 6 | partitions 4; 7 | 8 | 9 | select partition_name from user_tab_partitions where table_name = 'TQ84_HASH_PARTITION'; 10 | 11 | 12 | drop table tq84_hash_partition purge; 13 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/RecycleBin/purge.sql: -------------------------------------------------------------------------------- 1 | purge recyclebin; 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/RecycleBin/purge_tablespace.sql: -------------------------------------------------------------------------------- 1 | purge tablespace users; 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/RecycleBin/show_recycle_bin_sql.sql: -------------------------------------------------------------------------------- 1 | select object_name, original_name, operation, droptime from recyclebin; 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/RecycleBin/show_recycle_bin_sqlplus.sql: -------------------------------------------------------------------------------- 1 | show recyclebin 2 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/columns/diff-structure/create-tables.sql: -------------------------------------------------------------------------------- 1 | drop table y; 2 | drop table x; 3 | 4 | create table x (a number, b number(2), c number(2,3), d varchar2(4) , f date null, g varchar2(20), h number(6,2)); 5 | create table y (a number, c number(2,3), d date , e varchar2(5), f date not null, g varchar2(20), h number(7,2)); 6 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/columns/virtual/modify.sql: -------------------------------------------------------------------------------- 1 | create table tq84_virtual_col ( 2 | a number, 3 | b number, 4 | c as (a + b) 5 | ); 6 | 7 | 8 | insert into tq84_virtual_col (a, b) values (1,1); 9 | insert into tq84_virtual_col (a, b) values (4,3); 10 | insert into tq84_virtual_col (a, b) values (2,7); 11 | 12 | select * from tq84_virtual_col; 13 | 14 | alter table tq84_virtual_col modify c as (a*b); 15 | 16 | select * from tq84_virtual_col; 17 | 18 | drop table tq84_virtual_col purge; 19 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/parallel/degree-default-16.sql: -------------------------------------------------------------------------------- 1 | create table tq84_parallel_degree_default ( 2 | id number primary key, 3 | col_1 varchar2(10) not null, 4 | col_2 varchar2(10) 5 | ) 6 | parallel (degree default); 7 | 8 | 9 | create table tq84_parallel_16 ( 10 | id number primary key, 11 | col_1 varchar2(10) not null, 12 | col_2 varchar2(10) 13 | ) 14 | parallel 16; 15 | 16 | 17 | select 18 | table_name, 19 | degree 20 | from 21 | user_tables 22 | where 23 | table_name like 'TQ84%'; 24 | -------------------------------------------------------------------------------- /DatabaseObjects/Tables/types/data-dictionary.sql: -------------------------------------------------------------------------------- 1 | select 2 | obj.object_name, 3 | obj.object_type, 4 | obj.temporary, 5 | -- tab.temporary, 6 | tab.duration, 7 | tab.iot_type, 8 | tab.tablespace_name 9 | from 10 | user_objects obj left join 11 | user_tables tab on obj.object_name = tab.table_name 12 | where 13 | substr(object_name, 1, 9) = 'TBL_TYPE_' or 14 | substr(object_name, 1, 8) = 'ORA$PTT_' -- <== private temporary tables not shown in user_objects 15 | ; 16 | -------------------------------------------------------------------------------- /DatabaseObjects/Triggers/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | Using triggers to apply sequences to primary keys «auto_increment»: [auto_increment.sql](https://github.com/ReneNyffenegger/oracle-patterns/blob/master/DatabaseObjects/Sequences/auto_increment.sql). 3 | 4 | [Triggers on views](https://github.com/ReneNyffenegger/oracle-patterns/tree/master/DatabaseObjects/Views/triggersOnViews). 5 | -------------------------------------------------------------------------------- /Installed/data-dictionary/.gitignore: -------------------------------------------------------------------------------- 1 | user_all_dba_names.html 2 | -------------------------------------------------------------------------------- /Installed/data-dictionary/alert/arguments/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | sequence_id, 3 | reason_message_id, 4 | reason_argument_count, 5 | reason_argument_1, 6 | reason_argument_2, 7 | reason_argument_3, 8 | reason_argument_4, 9 | reason_argument_5, 10 | action_message_id, 11 | action_argument_count, 12 | action_argument_1, 13 | action_argument_2, 14 | action_argument_3, 15 | action_argument_4, 16 | action_argument_5 17 | from 18 | dba_alert_arguments; 19 | -------------------------------------------------------------------------------- /Installed/data-dictionary/alert/history/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | --reason_id, 3 | owner, 4 | object_name, 5 | subobject_name, 6 | object_type, 7 | reason 8 | from 9 | dba_alert_history 10 | order by 11 | sequence_id desc; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/audit/exists/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | os_username, 3 | timestamp, 4 | owner, 5 | obj_name, 6 | action_name, 7 | returncode, 8 | sql_text 9 | from 10 | dba_audit_exists; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/catalog/table_types.sql: -------------------------------------------------------------------------------- 1 | select 2 | --count(*), 3 | lower(table_type) table_type 4 | from 5 | dba_catalog 6 | group by 7 | table_type 8 | order by 9 | table_type; 10 | -- 11 | -- sequence 12 | -- synonym 13 | -- table 14 | -- view 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/connect_role_grantees/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | grantee, 3 | path_of_connect_role_grant, 4 | admin_opt 5 | from 6 | dba_connect_role_grantees 7 | order by 8 | grantee; 9 | -------------------------------------------------------------------------------- /Installed/data-dictionary/cons_columns/show_constraint_columns.sql: -------------------------------------------------------------------------------- 1 | create table tq84_cons ( 2 | col_a number, 3 | col_b varchar2(10), 4 | col_c date, 5 | col_d varchar2(10), 6 | col_e number, 7 | -- 8 | constraint tq84_cons_pk primary key(col_e, col_b) 9 | ); 10 | 11 | select 12 | column_name 13 | from 14 | user_cons_columns 15 | where 16 | constraint_name = 'TQ84_CONS_PK' 17 | order by 18 | position; 19 | -- COL_E 20 | -- COL_B 21 | 22 | drop table tq84_cons purge; 23 | -------------------------------------------------------------------------------- /Installed/data-dictionary/constraints/constraint_type.sql: -------------------------------------------------------------------------------- 1 | select 2 | -- count(*), 3 | constraint_type 4 | from 5 | dba_constraints 6 | group by 7 | constraint_type 8 | order by 9 | count(*) desc; 10 | -- C 11 | -- P 12 | -- R 13 | -- O 14 | -- U 15 | -- F 16 | -- V 17 | -------------------------------------------------------------------------------- /Installed/data-dictionary/context/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | schema, 3 | namespace, 4 | package, 5 | type 6 | from 7 | dba_context 8 | order by 9 | schema, 10 | namespace; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/cpu_usage_statistics/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | timestamp, 3 | cpu_count, 4 | cpu_core_count, 5 | cpu_socket_count, 6 | version, 7 | dbid 8 | from 9 | dba_cpu_usage_statistics 10 | order by 11 | timestamp desc; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/data_files/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | status, 3 | online_status, 4 | tablespace_name, 5 | to_char(bytes /1024/1024, '999,999.00') mb, 6 | to_char(user_bytes /1024/1024, '999,999.00') user_mb, 7 | to_char(maxbytes /1024/1024, '999,999.00') max_mb, 8 | -- blocks, 9 | -- user_blocks 10 | file_id, 11 | relative_fno, 12 | increment_by, 13 | file_name 14 | from 15 | dba_data_files 16 | order by 17 | status, 18 | online_status, 19 | tablespace_name; 20 | -------------------------------------------------------------------------------- /Installed/data-dictionary/datapump/jobs/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner_name, 3 | job_name, 4 | operation, 5 | job_mode, 6 | state, 7 | degree, 8 | attached_sessions, 9 | datapump_sessions 10 | from 11 | dba_datapump_jobs 12 | order by 13 | owner_name, 14 | job_name; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/datapump/sessions/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner_name, 3 | job_name, 4 | inst_id, 5 | saddr, 6 | session_type 7 | from 8 | dba_datapump_sessions 9 | order by 10 | owner_name, 11 | job_name; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/db_links/README.md: -------------------------------------------------------------------------------- 1 | # dba_db_links 2 | 3 | Show existing database links. 4 | 5 | Use [v$dblink](https://github.com/ReneNyffenegger/oracle-patterns/tree/master/Installed/dynamic-performance-views/dblink) 6 | to show the open database links in a session. 7 | -------------------------------------------------------------------------------- /Installed/data-dictionary/db_links/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | db_link, 4 | username, 5 | host, 6 | created 7 | from 8 | dba_db_links 9 | order by 10 | db_link; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/ddl_locks/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | name, 4 | type, 5 | mode_held, 6 | mode_requested, 7 | session_id 8 | from 9 | dba_ddl_locks 10 | order by 11 | case mode_requested 12 | when 'Exclusive' then 1 13 | when 'Share' then 2 14 | when 'None' then 3 15 | else 4 end, 16 | owner, 17 | name 18 | ; 19 | -------------------------------------------------------------------------------- /Installed/data-dictionary/def_audit_opts/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | alt "alter" , 3 | aud "audit" , 4 | com "comment" , 5 | del "delete" , 6 | gra "grant" , 7 | ind "index" , 8 | ins "insert" , 9 | loc "lock" , 10 | ren "rename" , 11 | sel "select" , 12 | upd "update" , 13 | --ref -- Obsolete 14 | exe "execute" , 15 | fbk "flashback", 16 | rea "read" 17 | from 18 | all_def_audit_opts 19 | ; 20 | -------------------------------------------------------------------------------- /Installed/data-dictionary/dependencies/example-01.sql: -------------------------------------------------------------------------------- 1 | create table tq84_root (a number); 2 | 3 | create view tq84_dep_1 as select a*2 a2 from tq84_root; 4 | 5 | create view tq84_dep_2 as select a2*2 a4 from tq84_dep_1; 6 | 7 | select name from user_dependencies where referenced_name = 'TQ84_ROOT'; 8 | -- TQ84_DEP_1 9 | 10 | select name from user_dependencies where referenced_name = 'TQ84_DEP_1'; 11 | -- TQ84_DEP_2 12 | 13 | drop view tq84_dep_2; 14 | drop view tq84_dep_1; 15 | drop table tq84_root purge; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/dml_locks/example-01.sql: -------------------------------------------------------------------------------- 1 | create table tq84_dml_lock_test ( 2 | pk number primary key 3 | ); 4 | 5 | select * from dba_dml_locks; 6 | 7 | insert into tq84_dml_lock_test values (1); 8 | 9 | select 10 | mode_held, 11 | mode_requested, 12 | --last_convert currend_mode_granted_secs_ago, 13 | blocking_others 14 | from 15 | dba_dml_locks 16 | where 17 | owner = user; 18 | -- 19 | -- Row-X (SX) None Not Blocking 20 | -- 21 | 22 | drop table tq84_dml_lock_test purge; 23 | -------------------------------------------------------------------------------- /Installed/data-dictionary/feature_usage_statistics/overview.sql: -------------------------------------------------------------------------------- 1 | select 2 | name, 3 | detected_usages, 4 | currently_used, 5 | description, 6 | first_usage_date, 7 | last_usage_date 8 | from 9 | dba_feature_usage_statistics 10 | where 11 | version = '11.2.0.3.0'; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/invalid_objects/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | object_name, 4 | subobject_name, 5 | -- object_id, 6 | -- data_object_id, 7 | object_type, 8 | last_ddl_time, 9 | status, 10 | timestamp, 11 | temporary, 12 | generated, 13 | secondary, 14 | namespace, 15 | edition_name 16 | from 17 | dba_invalid_objects 18 | order by 19 | owner, 20 | object_name; 21 | -------------------------------------------------------------------------------- /Installed/data-dictionary/jobs/running/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | jru.sid, 3 | jru.last_date, 4 | jru.this_date, 5 | jbb.log_User, 6 | jbb.priv_user, 7 | jbb.schema_user 8 | from 9 | dba_jobs_running jru join 10 | dba_jobs jbb on jru.job = jbb.job; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/jobs/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | job, 3 | log_user, 4 | priv_user, 5 | schema_user, 6 | last_date, 7 | --last_sec, 8 | --this_date, 9 | --this_sec, 10 | next_date, 11 | --next_sec, 12 | round(total_time), 13 | broken, 14 | interval, 15 | failures, 16 | what 17 | --nls_env, 18 | --misc_env, 19 | --instance 20 | from 21 | dba_jobs 22 | order by 23 | job; 24 | -------------------------------------------------------------------------------- /Installed/data-dictionary/logstdby/parameters/parameter-names.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(name) 3 | from 4 | dba_logstdby_parameters 5 | order by 6 | lower(name); 7 | -- 8 | -- allow_transformation 9 | -- apply_servers 10 | -- event_log_dest 11 | -- log_auto_delete 12 | -- log_auto_del_retention_target 13 | -- max_events_recorded 14 | -- max_servers 15 | -- max_sga 16 | -- prepare_servers 17 | -- preserve_commit_order 18 | -- record_applied_ddl 19 | -- record_skip_ddl 20 | -- record_skip_errors 21 | -- record_unsupported_operations 22 | -------------------------------------------------------------------------------- /Installed/data-dictionary/logstdby/skip/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | name, 4 | statement_opt, 5 | use_like, 6 | esc, 7 | proc, 8 | error 9 | from 10 | dba_logstdby_skip 11 | order by 12 | owner; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/logstdby/unsupported/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | column_name, 5 | attributes, 6 | data_type 7 | from 8 | dba_logstdby_unsupported 9 | order by 10 | owner, 11 | table_name, 12 | column_name; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/logstdby/unsupported/table/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name 4 | from 5 | dba_logstdby_unsupported_table 6 | order by 7 | owner, 8 | table_name; 9 | -------------------------------------------------------------------------------- /Installed/data-dictionary/network/acl_privileges/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | prv.principal, 3 | prv.privilege, 4 | acl.host, 5 | acl.lower_port, 6 | acl.upper_port, 7 | --acl.acl, 8 | prv.is_grant, 9 | prv.invert, 10 | prv.start_date 11 | from 12 | dba_network_acl_privileges prv join 13 | dba_network_acls acl on prv.aclid = acl.aclid 14 | order by 15 | prv.principal, 16 | prv.privilege; 17 | -------------------------------------------------------------------------------- /Installed/data-dictionary/network/acls/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | host, 3 | lower_port, 4 | upper_port, 5 | acl, 6 | aclid 7 | from 8 | dba_network_acls; 9 | -------------------------------------------------------------------------------- /Installed/data-dictionary/nls/database_parameters/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(parameter) parameter, 3 | lower(value ) value 4 | from 5 | nls_database_parameters 6 | order by 7 | parameter; 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/nls/instance_parameters/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(parameter) parameter, 3 | lower(value ) value 4 | from 5 | nls_instance_parameters 6 | order by 7 | parameter; 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/nls/session_parameters/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(parameter) parameter, 3 | lower(value ) value 4 | from 5 | nls_session_parameters 6 | order by 7 | parameter; 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/obj/audit_opts/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | object_name, 4 | object_type, 5 | alt, 6 | aud, 7 | com, 8 | del, 9 | gra, 10 | ind, 11 | loc, 12 | ren, 13 | sel, 14 | upd, 15 | ref, 16 | exe, 17 | cre, 18 | rea, 19 | wri, 20 | fbk 21 | from 22 | dba_obj_audit_opts 23 | order by 24 | owner, 25 | object_name; 26 | -------------------------------------------------------------------------------- /Installed/data-dictionary/object/size/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | name, 4 | type, 5 | source_size, 6 | parsed_size, 7 | code_size, 8 | error_size 9 | from 10 | dba_object_size 11 | order by 12 | owner, 13 | greatest(source_size, parsed_size, code_size) desc; 14 | -------------------------------------------------------------------------------- /Installed/data-dictionary/outstanding_alerts/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | -- sequence_id 3 | -- reasonid, -- Join with v$alert_Types 4 | reason, 5 | suggested_action, 6 | metric_value, 7 | message_type, 8 | message_level, 9 | advisor_name 10 | owner, 11 | object_name, 12 | subobject_name, 13 | object_type, 14 | message_group 15 | -- time_suggested, 16 | -- creation_time 17 | from 18 | dba_outstanding_alerts; 19 | -------------------------------------------------------------------------------- /Installed/data-dictionary/part_tables/README.md: -------------------------------------------------------------------------------- 1 | 2 | ## Links 3 | https://github.com/ReneNyffenegger/oracle-patterns/tree/master/DatabaseObjects/Tables/Partitions 4 | -------------------------------------------------------------------------------- /Installed/data-dictionary/password_limits/resource_names.sql: -------------------------------------------------------------------------------- 1 | select 2 | resource_name 3 | from 4 | user_password_limits 5 | order by 6 | resource_name; 7 | -- 8 | -- FAILED_LOGIN_ATTEMPTS 9 | -- PASSWORD_GRACE_TIME 10 | -- PASSWORD_LIFE_TIME 11 | -- PASSWORD_LOCK_TIME 12 | -- PASSWORD_REUSE_MAX 13 | -- PASSWORD_REUSE_TIME 14 | -- PASSWORD_VERIFY_FUNCTION 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/registry/banners/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | banner 3 | from 4 | all_registry_banners 5 | order by 6 | lower(banner); 7 | -------------------------------------------------------------------------------- /Installed/data-dictionary/registry/database/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | platform_id, 3 | platform_name, 4 | edition 5 | from 6 | dba_registry_database; 7 | -------------------------------------------------------------------------------- /Installed/data-dictionary/registry/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | comp_id, 3 | comp_name, 4 | schema, 5 | procedure, 6 | version, 7 | status, 8 | modified, 9 | namespace, 10 | other_schemas 11 | from 12 | dba_registry 13 | order by 14 | lower(comp_name); 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/represoultion/method/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | conflict_type, 3 | method_name 4 | from 5 | dba_represolution_method 6 | order by 7 | conflict_type, 8 | method_name; 9 | -------------------------------------------------------------------------------- /Installed/data-dictionary/resource/incarnations/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | resource_type, 3 | resource_name, 4 | db_unique_name, 5 | db_domain, 6 | instance_name, 7 | host_name, 8 | startup_time 9 | from 10 | dba_resource_incarnations; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/resource/limits/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(resource_name), 3 | limit 4 | from 5 | user_resource_limits 6 | order by 7 | lower(resource_name); 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/role/privs/show-privs-for-specific-user.sql: -------------------------------------------------------------------------------- 1 | select 2 | granted_role, 3 | admin_option, 4 | default_role 5 | from 6 | dba_role_privs 7 | where 8 | grantee = 'RNYFFENEGGER' 9 | order by 10 | granted_role; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/role/role_privs/show.sql: -------------------------------------------------------------------------------- 1 | select * from role_role_privs; 2 | -------------------------------------------------------------------------------- /Installed/data-dictionary/role/sys_privs/show-privs-for-specific-role.sql: -------------------------------------------------------------------------------- 1 | select 2 | role, 3 | privilege, 4 | admin_option 5 | from 6 | role_sys_privs 7 | where 8 | role in ('CONNECT', 'RESOURCE') 9 | order by 10 | role, 11 | privilege; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/role/tab_privs/show-privs-for-specific-role.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | column_name, 5 | privilege, 6 | grantable 7 | from 8 | role_tab_privs 9 | where 10 | role = 'R_DEVELOP' 11 | order by 12 | owner, 13 | table_name, 14 | column_name nulls last, 15 | privilege; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/roles/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | role, 3 | password_required, 4 | authentication_type, 5 | common, 6 | oracle_maintained 7 | from 8 | dba_roles 9 | order by 10 | oracle_maintained, 11 | role; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/scheduler/global_attribute/attribute_names.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(attribute_name) name 3 | from 4 | dba_scheduler_global_attribute 5 | order by 6 | lower(attribute_name); 7 | -------------------------------------------------------------------------------- /Installed/data-dictionary/segments/find-largest.sql: -------------------------------------------------------------------------------- 1 | select /*+ parallel(16) */ 2 | round(bytes / 1024/1024/1024, 2) size_gb, 3 | owner, 4 | segment_name, 5 | tablespace_name, 6 | segment_type, 7 | segment_subtype 8 | from 9 | dba_segments 10 | order by 11 | bytes desc nulls last; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/source/show-package-bodys-source-text.sql: -------------------------------------------------------------------------------- 1 | select 2 | line, 3 | text 4 | from 5 | dba_source 6 | where 7 | line between 5 and 15 and 8 | owner = user and 9 | -- name = 'STANDARD' and 10 | name = 'TQ84_PKG_B' and 11 | type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION') 12 | -- origin_con_id = 0 13 | order by 14 | line; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sql/management_config/parameter_names.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(parameter_name) 3 | from 4 | dba_sql_management_config 5 | order by 6 | parameter_name; 7 | -- 8 | -- plan_retention_weeks 9 | -- space_budget_percent 10 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sql/monitor_usage/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | num_db_reports, 3 | num_em_reports, 4 | first_db_report_time, 5 | last_db_report_time, 6 | first_em_report_time, 7 | last_em_report_time 8 | from 9 | dba_sql_monitor_usage 10 | order by 11 | first_db_report_time; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sql/plan/dir_objects/joins.sql: -------------------------------------------------------------------------------- 1 | select 2 | obj.object_name, 3 | obj.subobject_name, 4 | dir.reason, 5 | dir.created, 6 | dir.type, 7 | obj.object_type 8 | from 9 | dba_sql_plan_dir_objects obj join 10 | dba_sql_plan_directives dir on obj.directive_id = dir.directive_id 11 | where 12 | obj.owner = 'RNYFFENEGGER' 13 | order by 14 | dir.created desc; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sql/plan/directives/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | directive_id, 3 | type, 4 | enabled, 5 | auto_drop, 6 | reason, 7 | to_char(created , 'dd.mm.yy hh24:mi:ss') created, 8 | to_char(last_modified, 'dd.mm.yy hh24:mi:ss') last_modified, 9 | to_char(last_used , 'dd.mm.yy hh24:mi:ss') last_used 10 | --notes 11 | from 12 | dba_sql_plan_directives 13 | order by 14 | created desc; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sql/profiles/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | name, 3 | category, 4 | created, 5 | last_modified, 6 | description, 7 | type, 8 | task_id, 9 | task_exec_name, 10 | --task_obj_id, 11 | --task_fnd_id, 12 | --task_rec_id, 13 | --task_con_dbid, 14 | sql_text, 15 | signature, 16 | status 17 | from 18 | dba_sql_profiles 19 | order by 20 | status, 21 | created desc; 22 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sqlset/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | id, 3 | owner, 4 | name, 5 | description, 6 | statement_count, 7 | con_dbid, 8 | created, 9 | last_modified 10 | from 11 | dba_sqlset 12 | order by 13 | owner, 14 | created desc; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/stat_extensions/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | extension_name, 5 | extension, 6 | creator, 7 | droppable 8 | from 9 | dba_stat_extensions 10 | order by 11 | owner, 12 | table_name; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/stored_settings/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | object_name, 4 | param_name, 5 | param_value, 6 | object_type, 7 | origin_con_id 8 | --object_id 9 | from 10 | dba_stored_settings 11 | order by 12 | owner, 13 | object_name; 14 | -------------------------------------------------------------------------------- /Installed/data-dictionary/streams/columns/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | column_name, 5 | sync_capture_version, 6 | sync_capture_reason, 7 | apply_version, 8 | apply_reason 9 | from 10 | dba_streams_columns 11 | order by 12 | owner, 13 | table_name, 14 | column_name; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/streams/newly_supported/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | reason, 5 | compatible 6 | from 7 | dba_streams_newly_supported 8 | order by 9 | owner, 10 | table_name; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/streams/unsupported/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | reason, 5 | auto_filtered 6 | from 7 | dba_streams_unsupported 8 | order by 9 | owner, 10 | table_name; 11 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sum_delta/joins.sql: -------------------------------------------------------------------------------- 1 | select /*+ parallel(16) */ 2 | obj.owner, 3 | obj.object_name, 4 | obj.object_type, 5 | --sdt.tableobj#, 6 | --sdt.partitionobj#, 7 | sdt.dmloperation, 8 | sdt.scn, 9 | sdt.timestamp, 10 | sdt.lowrowid, 11 | sdt.highrowid, 12 | sdt.sequence, 13 | sdt.xid 14 | from 15 | all_sumdelta sdt left join 16 | dba_objects obj on sdt.tableobj# = obj.object_id 17 | where 18 | sdt.timestamp <= sysdate -- ??? 19 | order by 20 | sdt.timestamp desc; 21 | -------------------------------------------------------------------------------- /Installed/data-dictionary/summaries/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | summary_name, 4 | container_owner, 5 | container_name, 6 | refresh_method, 7 | contains_views, 8 | summary, 9 | unusable, 10 | restricted_syntax, 11 | inc_refreshable, 12 | known_stale, 13 | query_len 14 | query, 15 | --last_refresh_scn, 16 | last_refresh_date, 17 | fullrefreshtim, 18 | increfreshtim 19 | from 20 | dba_summaries 21 | order by 22 | owner, 23 | last_refresh_date desc; 24 | -------------------------------------------------------------------------------- /Installed/data-dictionary/summary/aggregates/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | summary_name, 4 | --position_in_select, 5 | container_column, 6 | agg_function, 7 | distinctflag, 8 | measure 9 | from 10 | dba_summary_aggregates 11 | order by 12 | owner, 13 | summary_name, 14 | position_in_select; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/summary/detail_tables/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | summary_name, 4 | detail_owner, 5 | detail_relation, 6 | detail_type, 7 | detail_alias 8 | from 9 | dba_summary_detail_tables 10 | order by 11 | owner, 12 | summary_name; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/summary/joins/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | summary_name, 4 | detailobj1_owner, 5 | detailobj1_relation, 6 | detailobj1_column, 7 | operator, 8 | detailobj2_owner, 9 | detailobj2_relation, 10 | detailobj2_column 11 | from 12 | dba_summary_joins 13 | order by 14 | owner, 15 | summary_name; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/summary/keys/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | summary_name, 4 | position_in_select, 5 | container_column, 6 | detailobj_owner, 7 | detailobj_name, 8 | detailobj_alias, 9 | detailobj_type, 10 | detailobj_column 11 | from 12 | dba_summary_keys 13 | order by 14 | owner, 15 | summary_name, 16 | position_in_select; 17 | -------------------------------------------------------------------------------- /Installed/data-dictionary/supplemental_logging/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | minimal, 3 | primary_key, 4 | unique_index, 5 | foreign_key, 6 | all_column, 7 | procedural 8 | from 9 | dba_supplemental_logging; 10 | -------------------------------------------------------------------------------- /Installed/data-dictionary/sys_privs/show-privs-for-specific-user.sql: -------------------------------------------------------------------------------- 1 | select 2 | privilege, 3 | admin_option 4 | from 5 | dba_sys_privs 6 | where 7 | grantee = 'RNYFFENEGGER'; 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/cols/hidden-and-virtual-columns.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | column_name, 5 | hidden_column, 6 | virtual_column, 7 | data_type, 8 | qualified_col_name, 9 | column_id, 10 | internal_column_id, 11 | segment_column_id 12 | from 13 | dba_tab_cols 14 | where 15 | hidden_column <> 'NO' or 16 | virtual_column <> 'NO' 17 | order by 18 | owner, 19 | table_name, 20 | column_id; 21 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/comments/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | comments, 5 | table_type, 6 | origin_con_id 7 | from 8 | dba_tab_comments 9 | where 10 | comments is not null 11 | order by 12 | owner, 13 | table_name 14 | ; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/modifications/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | table_owner, 3 | table_name, 4 | partition_name, 5 | subpartition_name, 6 | inserts, 7 | updates, 8 | deletes, 9 | truncated, 10 | drop_segments, 11 | timestamp 12 | from 13 | dba_tab_modifications 14 | order by 15 | table_owner, 16 | timestamp desc; 17 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/partitions/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | https://github.com/ReneNyffenegger/oracle-patterns/tree/master/DatabaseObjects/Tables/Partitions 3 | 4 | https://github.com/ReneNyffenegger/oracle-patterns/tree/master/Installed/data-dictionary/tab_subpartitions 5 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/privs/show-privs-for-specific-user.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | grantor, 5 | privilege, 6 | grantable, 7 | hierarchy 8 | from 9 | dba_tab_privs 10 | where 11 | grantee = 'RENE' 12 | order by 13 | owner, 14 | table_name, 15 | privilege; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/statistics/stale-or-no-statistics.sql: -------------------------------------------------------------------------------- 1 | select 2 | tst.owner, 3 | tst.table_name, 4 | tst.last_analyzed, 5 | tst.object_type 6 | from 7 | all_tab_statistics tst join 8 | all_users usr on tst.owner = usr.username 9 | where 10 | ( stale_stats is null or stale_stats = 'YES' ) and 11 | usr.oracle_maintained <> 'Y' and 12 | table_name not like 'BIN$%' 13 | order by 14 | owner, 15 | table_name; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/tab/subpartitions/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | 3 | https://github.com/ReneNyffenegger/oracle-patterns/tree/master/DatabaseObjects/Tables/Partitions 4 | 5 | https://github.com/ReneNyffenegger/oracle-patterns/tree/master/Installed/data-dictionary/tab_partitions 6 | -------------------------------------------------------------------------------- /Installed/data-dictionary/temp/free_space/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | tablespace_name, 3 | round(tablespace_size /1024/1204/1024, 2) size_gb, 4 | round(allocated_space /1024/1024/1024, 2) alloc_gb, 5 | round(free_space /1024/1024/1024, 2) free_gb 6 | from 7 | dba_temp_free_space; 8 | -------------------------------------------------------------------------------- /Installed/data-dictionary/transformations/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | transformation_id, 3 | owner, 4 | name, 5 | from_type, 6 | to_type 7 | from 8 | dba_transformations 9 | order by 10 | owner, 11 | name; 12 | -------------------------------------------------------------------------------- /Installed/data-dictionary/trigger/cols/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | table_owner, 3 | table_name, 4 | column_name, 5 | column_list, 6 | column_usage, 7 | trigger_owner, 8 | trigger_name 9 | from 10 | dba_trigger_cols 11 | order by 12 | table_owner, 13 | table_name, 14 | column_name; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/ts_quotas/show.sql: -------------------------------------------------------------------------------- 1 | select /*+ parallel(16) */ 2 | username, 3 | tablespace_name, 4 | round(bytes/1024/1024/1024, 2) gb, 5 | max_bytes, 6 | blocks, 7 | max_blocks 8 | from 9 | dba_ts_quotas 10 | order by 11 | username, 12 | tablespace_name; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/unused/col_tabs/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | count 5 | from 6 | dba_unused_col_tabs 7 | order by 8 | owner, 9 | table_name; 10 | -------------------------------------------------------------------------------- /Installed/data-dictionary/updatable_columns/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | column_name, 5 | insertable, 6 | deletable 7 | from 8 | dba_updatable_columns 9 | order by 10 | owner, 11 | table_name, 12 | column_name; 13 | -------------------------------------------------------------------------------- /Installed/data-dictionary/users/account_status.sql: -------------------------------------------------------------------------------- 1 | select 2 | count(*), 3 | account_status 4 | from 5 | dba_users 6 | group by 7 | account_status 8 | order by 9 | account_status; 10 | -------------------------------------------------------------------------------- /Installed/data-dictionary/users/joins.sql: -------------------------------------------------------------------------------- 1 | select 2 | usr.username, 3 | usr.user_id, 4 | pwf.sysdba, 5 | pwf.sysoper, 6 | pwf.sysasm 7 | --pwf.sysbackup, 8 | --pwf.sysdg, 9 | --pwf.syskm 10 | from 11 | dba_users usr left join 12 | v$pwfile_users pwf on usr.username = pwf.username 13 | ; 14 | -------------------------------------------------------------------------------- /Installed/data-dictionary/users/with_defpwd/joins.sql: -------------------------------------------------------------------------------- 1 | select 2 | dp.username, 3 | dp.product, 4 | us.account_status, 5 | us.lock_date, 6 | us.expiry_date, 7 | us.oracle_maintained 8 | from 9 | dba_users_with_defpwd dp join 10 | dba_users us on dp.username = us.username 11 | order by 12 | us.oracle_maintained desc, 13 | dp.username; 14 | -------------------------------------------------------------------------------- /Installed/data-dictionary/ustats/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | object_owner, 3 | object_name, 4 | partition_name, 5 | object_type, 6 | association, 7 | column_name, 8 | statstype_schema, 9 | statstype_name, 10 | statistics 11 | from 12 | dba_ustats 13 | order by 14 | object_owner, 15 | object_name; 16 | -------------------------------------------------------------------------------- /Installed/data-dictionary/warning_settings/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | object_name, 4 | object_type, 5 | warning, 6 | setting, 7 | object_id 8 | from 9 | dba_warning_settings 10 | order by 11 | owner, 12 | object_name, 13 | object_type; 14 | -------------------------------------------------------------------------------- /Installed/data-dictionary/xml/tables/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | table_name, 4 | xmlschema, 5 | schema_owner, 6 | element_name, 7 | storage_type, 8 | anyschema, 9 | nonschema 10 | from 11 | dba_xml_tables 12 | order by 13 | owner, 14 | table_name; 15 | -------------------------------------------------------------------------------- /Installed/data-dictionary/xs/users/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | name, 3 | guid, 4 | external_source, 5 | roles_default_enabled, 6 | status, 7 | account_status, 8 | lock_date, 9 | expiry_date, 10 | profile, 11 | schema, 12 | start_date, 13 | end_date, 14 | direct_logon_user, 15 | verifier_type, 16 | description 17 | from 18 | dba_xs_users 19 | order by 20 | name; 21 | -------------------------------------------------------------------------------- /Installed/dbms/advanced_rewrite/intro/_run.sql: -------------------------------------------------------------------------------- 1 | @ grant 2 | 3 | connect rene/rene 4 | @ table-1 5 | @ equivalence-1 6 | @ select-1 7 | 8 | begin 9 | sys.dbms_advanced_rewrite.drop_rewrite_equivalence('return_twice_the_num'); 10 | end; 11 | / 12 | 13 | drop table tq84_rewrite_tab_1; 14 | -------------------------------------------------------------------------------- /Installed/dbms/advanced_rewrite/intro/equivalence-1.sql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | sys.dbms_advanced_rewrite.declare_rewrite_equivalence ( 4 | name => 'return_twice_the_num', 5 | source_stmt => 'select num, txt from tq84_rewrite_tab_1', 6 | destination_stmt => 'select 2*num, txt from tq84_rewrite_tab_1', 7 | validate => false, 8 | rewrite_mode => 'general' 9 | ); 10 | 11 | end; 12 | / 13 | -------------------------------------------------------------------------------- /Installed/dbms/advanced_rewrite/intro/grant.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | 3 | grant execute on dbms_advanced_rewrite to rene; 4 | grant create materialized view to rene; 5 | -------------------------------------------------------------------------------- /Installed/dbms/advanced_rewrite/intro/select-1.sql: -------------------------------------------------------------------------------- 1 | alter system set query_rewrite_integrity=trusted scope=memory; 2 | alter system set query_rewrite_enabled =force scope=memory; 3 | 4 | select 5 | txt, 6 | num 7 | from 8 | tq84_rewrite_tab_1; 9 | 10 | select 11 | txt, 12 | num / 2 as num 13 | from 14 | tq84_rewrite_tab_1; 15 | -------------------------------------------------------------------------------- /Installed/dbms/advanced_rewrite/intro/table-1.sql: -------------------------------------------------------------------------------- 1 | create table tq84_rewrite_tab_1 ( 2 | num number, 3 | txt varchar2(20) 4 | ); 5 | 6 | insert into tq84_rewrite_tab_1 values (1, 'one' ); 7 | insert into tq84_rewrite_tab_1 values (2, 'two' ); 8 | insert into tq84_rewrite_tab_1 values (3, 'three'); 9 | insert into tq84_rewrite_tab_1 values (4, 'four' ); 10 | insert into tq84_rewrite_tab_1 values (5, 'five' ); 11 | 12 | commit; 13 | -------------------------------------------------------------------------------- /Installed/dbms/audit_mgmt/README.md: -------------------------------------------------------------------------------- 1 | The directory `archiving` contains a most simple setup 2 | to demonstrate how archiving of fine grained audited data 3 | could be achieved. 4 | -------------------------------------------------------------------------------- /Installed/dbms/crypto/hash/md5.sql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | txt varchar2(100) := 'foo, bar and baz.'; 4 | md5 raw(16); -- MD5 is 128 = 16 * 8 bits 5 | 6 | begin 7 | 8 | md5 := dbms_crypto.hash( 9 | utl_i18n.string_to_raw(txt, 'AL32UTF8'), 10 | dbms_crypto.hash_md5 11 | ); 12 | 13 | dbms_output.put_line('MD5 is: ' || md5); 14 | 15 | end; 16 | / 17 | -------------------------------------------------------------------------------- /Installed/dbms/crypto/hash/sha-256.sql: -------------------------------------------------------------------------------- 1 | declare 2 | h raw(32); -- 32 * 8-bit = 256-bit 3 | 4 | c clob := q'[foo 5 | bar 6 | baz]'; 7 | 8 | begin 9 | h := dbms_crypto.HASH(c, dbms_crypto.hash_sh256); 10 | dbms_output.put_line('hash: ' || rawtohex(h)); 11 | end; 12 | / 13 | -------------------------------------------------------------------------------- /Installed/dbms/cube_log/table_create.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Create table cube_build_log (See default_name.sql) 3 | -- 4 | exec dbms_cube_log.table_create(dbms_cube_log.type_build) 5 | 6 | 7 | select 8 | object_type, 9 | sysdate - created 10 | from 11 | user_objects where object_name = 'CUBE_BUILD_LOG'; 12 | 13 | 14 | desc cube_build_log 15 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/clone_schema/call_count_procs.sql: -------------------------------------------------------------------------------- 1 | exec dbms_output.put_line('package_a_1.count_a: ' || package_a_1.count_a); 2 | exec dbms_output.put_line('package_a_1.count_b: ' || package_a_1.count_b); 3 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/clone_schema/export.par: -------------------------------------------------------------------------------- 1 | content=metadata_only 2 | directory=DATAPUMP_DIR 3 | dumpfile=clone_schema_a.dmp 4 | schemas=from_schema_a 5 | # exclude=trigger 6 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/clone_schema/export_import_dp.sql: -------------------------------------------------------------------------------- 1 | $expdp exp_imp_admin/p parfile=export.par 2 | $impdp exp_imp_admin/p parfile=import.par 3 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/clone_schema/export_import_plsql.sql: -------------------------------------------------------------------------------- 1 | connect exp_imp_admin/p 2 | 3 | @export.plsql 4 | @import.plsql 5 | 6 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/clone_schema/import.par: -------------------------------------------------------------------------------- 1 | directory=DATAPUMP_DIR 2 | dumpfile=clone_schema_a.dmp 3 | remap_schema=from_schema_a:to_schema_a 4 | transform=OID:n 5 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/extract_schema_sql/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | 3 | My question on [dba.stackexchange.com](http://dba.stackexchange.com/questions/91149/how-to-generate-an-sql-file-with-dbms-datapump). 4 | 5 | 1519981.1: How to Generate A SQL File Using The DBMS_DATAPUMP_API? 6 | Unfortunately, this note is a bit misleading in that it doesn't explitely say that the '.dmp' file must have been created 7 | first. 8 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/extract_schema_sql/import_sql_file.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | @drop_schema_if_exists tq84_user 3 | 4 | create user tq84_user 5 | identified by p 6 | quota unlimited on users; 7 | 8 | grant create procedure, 9 | create table, 10 | create session, 11 | create view 12 | to tq84_user; 13 | 14 | connect tq84_user/p 15 | 16 | @c:\temp\schema.sql 17 | -------------------------------------------------------------------------------- /Installed/dbms/datapump/extract_schema_sql/run.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | 3 | @@drop_if_exists DATAPUMP_DIR 4 | create directory DATAPUMP_DIR as 'c:\temp'; 5 | 6 | @@create_schema 7 | 8 | @@export_dump.plsql 9 | @@export_sql.plsql 10 | 11 | @@import_sql_file 12 | 13 | $@del c:\temp\EXPORT.DMP 14 | $@del c:\temp\schema.sql 15 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/_run.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_src; 2 | drop table tq84_dest; 3 | drop table tq84_dest_err; 4 | 5 | @ table 6 | @ error-table 7 | 8 | @ insert-src 9 | @ insert-dest 10 | 11 | commit; 12 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/error-table.sql: -------------------------------------------------------------------------------- 1 | begin 2 | dbms_errlog.create_error_log( 3 | 'tq84_dest', 4 | 'tq84_dest_err' 5 | ); 6 | end; 7 | / 8 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/insert-dest.sql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | insert into tq84_dest 4 | select 5 | id, 6 | txt || '!', 7 | 42/num 8 | from 9 | tq84_src 10 | log errors into tq84_dest_err 11 | -- 12 | -- Log all errors: 13 | -- 14 | reject limit unlimited; 15 | 16 | 17 | insert into tq84_dest values (99, '2nd statement', 42); 18 | 19 | end; 20 | / 21 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/insert-src.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_src values (1, 'def' , 7); 2 | insert into tq84_src values (2, 'nop' , 9); 3 | insert into tq84_src values (3, 'abc' , 0); 4 | insert into tq84_src values (4, 'klm' , 6); 5 | insert into tq84_src values (5, 'nop' , 6); 6 | insert into tq84_src values (6, 'qrs' , 9); 7 | insert into tq84_src values (4, 'tuv' , 2); 8 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/select.sql: -------------------------------------------------------------------------------- 1 | select 2 | ora_err_number$, 3 | ora_err_mesg$, 4 | id, 5 | txt, 6 | num 7 | from 8 | tq84_dest_err; 9 | -------------------------------------------------------------------------------- /Installed/dbms/errlog/table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_src ( 2 | id number(2), 3 | txt varchar2(20) not null, 4 | num number 5 | ); 6 | 7 | create table tq84_dest ( 8 | id number(2), 9 | txt varchar2(20) not null, 10 | num number, 11 | constraint tq84_err_log_pk primary key(id) 12 | ); 13 | -------------------------------------------------------------------------------- /Installed/dbms/lob/temporary/create-free.sql: -------------------------------------------------------------------------------- 1 | create table tq84_temporary_clob(c clob); 2 | 3 | declare 4 | c_ clob; 5 | begin 6 | dbms_lob.createtemporary(c_, false); 7 | 8 | dbms_lob.append(c_, 'foo'); 9 | dbms_lob.append(c_, 'bar'); 10 | dbms_lob.append(c_, 'baz'); 11 | 12 | insert into tq84_temporary_clob values (c_); 13 | 14 | dbms_lob.freetemporary(c_); 15 | end; 16 | / 17 | 18 | select * from tq84_temporary_clob; 19 | 20 | drop table tq84_temporary_clob; 21 | -------------------------------------------------------------------------------- /Installed/dbms/lock/run.bat: -------------------------------------------------------------------------------- 1 | @set connection_string=rene/rene 2 | 3 | @start session_blue.bat 4 | @start session_green.bat 5 | -------------------------------------------------------------------------------- /Installed/dbms/lock/session_blue.bat: -------------------------------------------------------------------------------- 1 | @rem echo %connection_string% 2 | 3 | @color 1f 4 | 5 | @sqlplus -S %connection_string% @blue 6 | -------------------------------------------------------------------------------- /Installed/dbms/lock/session_green.bat: -------------------------------------------------------------------------------- 1 | @rem echo %connection_string% 2 | 3 | @color 2f 4 | 5 | @sqlplus -S %connection_string% @green 6 | -------------------------------------------------------------------------------- /Installed/dbms/lock/sleep.sql: -------------------------------------------------------------------------------- 1 | begin 2 | dbms_output.put_line(to_char(sysdate, 'hh24:mi:ss') || ': going to sleep for 3 seconds.'); 3 | dbms_lock.sleep(3); 4 | 5 | dbms_output.put_line(to_char(sysdate, 'hh24:mi:ss') || ': going to sleep for 5 seconds.'); 6 | dbms_lock.sleep(5); 7 | 8 | dbms_output.put_line(to_char(sysdate, 'hh24:mi:ss') || ': finished.'); 9 | end; 10 | / 11 | -------------------------------------------------------------------------------- /Installed/dbms/lock/stop_sessions/run.bat: -------------------------------------------------------------------------------- 1 | @set connection_string=rene/rene 2 | 3 | @rem -------------------------------- 4 | @rem start four sessions 5 | 6 | @start session_blue.bat 7 | @start session_blue.bat 8 | @start session_blue.bat 9 | @start session_blue.bat 10 | 11 | 12 | 13 | @rem -------------------------------- 14 | @rem start another session to stop the 15 | @rem executions of the other four 16 | @rem sessions: 17 | 18 | @start session_green.bat 19 | -------------------------------------------------------------------------------- /Installed/dbms/lock/stop_sessions/session_blue.bat: -------------------------------------------------------------------------------- 1 | @color 1f 2 | 3 | @sqlplus -S %connection_string% @blue 4 | -------------------------------------------------------------------------------- /Installed/dbms/lock/stop_sessions/session_green.bat: -------------------------------------------------------------------------------- 1 | @color 2f 2 | 3 | @sqlplus -S %connection_string% @green 4 | -------------------------------------------------------------------------------- /Installed/dbms/metadata/user.sql: -------------------------------------------------------------------------------- 1 | select dbms_metadata.get_ddl('USER', 'RENE') from dual; 2 | -------------------------------------------------------------------------------- /Installed/dbms/mining/model/attributes/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | model_name, 4 | attribute_name, 5 | attribute_type, 6 | data_type, 7 | data_length, 8 | data_precision, 9 | data_scale, 10 | usage_type, 11 | target, 12 | attribute_spec 13 | from 14 | dba_mining_model_attributes 15 | order by 16 | owner, 17 | model_name, 18 | attribute_name; 19 | -------------------------------------------------------------------------------- /Installed/dbms/mining/models/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | model_name, 4 | mining_function, 5 | algorithm, 6 | creation_date, 7 | build_duration, 8 | model_size, 9 | comments 10 | from 11 | dba_mining_models 12 | order by 13 | owner, 14 | model_name; 15 | -------------------------------------------------------------------------------- /Installed/dbms/mining/settings/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | owner, 3 | model_name, 4 | setting_name, 5 | setting_value, 6 | setting_type 7 | from 8 | dba_mining_model_settings 9 | order by 10 | owner, 11 | model_name, 12 | setting_name; 13 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/perl/write_pipe.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | status number; 3 | begin 4 | dbms_pipe.pack_message('hello world'); 5 | status := dbms_pipe.send_message('TestPipe'); 6 | end; 7 | / 8 | 9 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/purge/run.bat: -------------------------------------------------------------------------------- 1 | @set connect_string=rene/rene 2 | 3 | @start session_blue.bat 4 | @start session_green.bat 5 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/purge/session_blue.bat: -------------------------------------------------------------------------------- 1 | @color 1f 2 | 3 | @sqlplus -S %connect_string% @blue 4 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/purge/session_green.bat: -------------------------------------------------------------------------------- 1 | @color 2f 2 | 3 | @sqlplus -S %connect_string% @green 4 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/readme.md: -------------------------------------------------------------------------------- 1 | The directory `perl` contains a perl script (`read_pipe.pl`) to read from a pipe. 2 | 3 | `send_receive` is a most simple example of a session that writes into a pipe 4 | and another session that reads from the pipe. 5 | 6 | `purge` demonstrates `dbms_pipe.purge`. 7 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/send_receive/blue.sql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | v number; 4 | 5 | begin 6 | 7 | -- Wait 3 seconds... 8 | dbms_lock.sleep(3); 9 | 10 | -- ... then write a message into a pipe 11 | 12 | dbms_pipe.pack_message('Hello from the blue session!'); 13 | 14 | v := dbms_pipe.send_message('tq84-send-receive-pipe'); 15 | 16 | dbms_output.put_line('Message sent [' || v || ']'); 17 | 18 | end; 19 | / 20 | 21 | exit 22 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/send_receive/green.sql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | v number; 4 | 5 | m varchar2(4096); 6 | 7 | begin 8 | 9 | -- Waiting for the message sent in the green session: 10 | 11 | v := dbms_pipe.receive_message('tq84-send-receive-pipe'); 12 | 13 | dbms_pipe.unpack_message(m); 14 | 15 | dbms_output.put_line('Message received [' || v || ']'); 16 | dbms_output.put_line(' ' || m); 17 | 18 | 19 | end; 20 | / 21 | 22 | exit 23 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/send_receive/run.bat: -------------------------------------------------------------------------------- 1 | @set connect_string=rene/rene 2 | 3 | @start session_blue.bat 4 | @start session_green.bat 5 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/send_receive/session_blue.bat: -------------------------------------------------------------------------------- 1 | @color 1f 2 | 3 | @sqlplus -S %connect_string% @blue 4 | -------------------------------------------------------------------------------- /Installed/dbms/pipe/send_receive/session_green.bat: -------------------------------------------------------------------------------- 1 | @color 2f 2 | 3 | @sqlplus -S %connect_string% @green 4 | -------------------------------------------------------------------------------- /Installed/dbms/random/terminate.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- dbms_random.terminate() is terminated (that is: deprecated) with Oracle 11R1 3 | -- 4 | -------------------------------------------------------------------------------- /Installed/dbms/random/value.sql: -------------------------------------------------------------------------------- 1 | create table tq84_random_value ( 2 | val number 3 | ); 4 | 5 | insert into tq84_random_value 6 | select 7 | dbms_random.value(8, 12) 8 | from 9 | dual 10 | connect by 11 | level <= 100; 12 | 13 | select 14 | min(val) min_val, 15 | max(val) max_val, 16 | avg(val) avg_val 17 | from 18 | tq84_random_value; 19 | 20 | drop table tq84_random_value purge; 21 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/abort_redef_table.sql: -------------------------------------------------------------------------------- 1 | begin 2 | dbms_redefinition.abort_redef_table ( 3 | uname => user, 4 | orig_table =>'tq84_redefinition', 5 | int_table =>'tq84_redefinition_int', 6 | part_name => null 7 | ); 8 | 9 | end; 10 | / 11 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/can_redef_table.sql: -------------------------------------------------------------------------------- 1 | begin 2 | dbms_redefinition.can_redef_table(user, 'tq84_redefinition'); 3 | end; 4 | / 5 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/create-table-int.sql: -------------------------------------------------------------------------------- 1 | create table tq84_redefinition_int ( 2 | id number , -- No primary key to prevent «ORA-01408: such column list already indexed» 3 | num number(6,2), -- Change varchar2 to number 4 | dt date -- Rename column and data type 5 | ); 6 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/create-table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_redefinition ( 2 | id number primary key, 3 | num varchar2(10), 4 | ts timestamp 5 | ); 6 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/drop-tables.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_redefinition_int purge; 2 | drop table tq84_redefinition purge; 3 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/finish_redef_table.sql: -------------------------------------------------------------------------------- 1 | exec dbms_redefinition.finish_redef_table(user, 'tq84_redefinition', 'tq84_redefinition_int'); 2 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/insert-data.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_redefinition values (1, '42' , systimestamp + 59/23); 2 | insert into tq84_redefinition values (2, '-9.876', systimestamp + 51/31); 3 | insert into tq84_redefinition values (3, '1.2e3' , systimestamp + 61/17); 4 | 5 | commit; 6 | 7 | select * from tq84_redefinition; 8 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/select.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_redefinition; 2 | select * from tq84_redefinition_int; 3 | -------------------------------------------------------------------------------- /Installed/dbms/redefinition/rename-column_change-datatype/sync_interim_table.sql: -------------------------------------------------------------------------------- 1 | exec dbms_redefinition.sync_interim_table(user, 'tq84_redefinition', 'tq84_redefinition_int'); 2 | -------------------------------------------------------------------------------- /Installed/dbms/scheduler/program_schedule_job/package.plsql: -------------------------------------------------------------------------------- 1 | create or replace package tq84_pkg as -- { 2 | 3 | procedure proc; 4 | 5 | end tq84_pkg; -- } 6 | / 7 | 8 | create or replace package body tq84_pkg as -- { 9 | 10 | procedure proc is -- { 11 | begin 12 | insert into tq84_table values (sysdate, 'Inserted from tq84_pkg.proc'); 13 | end proc; -- } 14 | 15 | end tq84_pkg; -- } 16 | / 17 | -------------------------------------------------------------------------------- /Installed/dbms/scheduler/program_schedule_job/table.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_table purge; 2 | create table tq84_table ( 3 | tm date, 4 | txt varchar2(50) 5 | ); 6 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/_run.sql: -------------------------------------------------------------------------------- 1 | @ spec 2 | @ body 3 | @ profile 4 | @ set-profile 5 | @ get-translated 6 | @ set-events 7 | @ select 8 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/get-translated.sql: -------------------------------------------------------------------------------- 1 | declare 2 | sql_new clob; 3 | begin 4 | dbms_sql_translator.translate_sql( 5 | 'select * from dba_users', 6 | sql_new 7 | ); 8 | 9 | dbms_output.put_line('Translated SQL is:'); 10 | dbms_output.put_line(' ' || sql_new); 11 | end; 12 | / 13 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/select.sql: -------------------------------------------------------------------------------- 1 | select * from dba_objects; 2 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/set-events.sql: -------------------------------------------------------------------------------- 1 | alter session set events = '10601 trace name context forever, level 32'; 2 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/set-profile.sql: -------------------------------------------------------------------------------- 1 | alter session set sql_translation_profile = renes_sql_translation_profile; 2 | -------------------------------------------------------------------------------- /Installed/dbms/sql_translator/interface-package/spec.sql: -------------------------------------------------------------------------------- 1 | create or replace package renes_sql_translator as 2 | 3 | procedure translate_sql( 4 | sql_text in clob, 5 | translated_text out clob 6 | ); 7 | 8 | procedure translate_error( 9 | error_code in binary_integer, 10 | translated_code out binary_integer, 11 | translated_sqlstate out varchar2 12 | ); 13 | 14 | end renes_sql_translator; 15 | / 16 | -------------------------------------------------------------------------------- /Installed/dbms/utility/db_version.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | version varchar2(100); 3 | compatibility varchar2(100); 4 | begin 5 | dbms_utility.db_version(version, compatibility); 6 | 7 | dbms_output.put_line('DB Version: ' || version ); 8 | dbms_output.put_line('Compatibiliy: ' || compatibility); 9 | 10 | end; 11 | / 12 | -------------------------------------------------------------------------------- /Installed/dbms/utility/time.plsql: -------------------------------------------------------------------------------- 1 | begin 2 | dbms_output.put_line('time: ' || dbms_utility.get_time); 3 | dbms_output.put_line('cpu time: ' || dbms_utility.get_cpu_time); 4 | end; 5 | / 6 | -------------------------------------------------------------------------------- /Installed/dbms/xa/session_03.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_xa; 2 | 3 | declare 4 | ret_txt varchar2(100); 5 | begin 6 | 7 | ret_txt := tq84_xa_result_to_string( sys.dbms_xa.xa_commit(dbms_xa_xid(42), onePhase => true) ); 8 | 9 | if ret_txt != 'OK' then 10 | dbms_output.put_line('Error committing: ' || ret_txt); 11 | end if; 12 | end; 13 | / 14 | 15 | select * from tq84_xa; 16 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/active/session_history/minutes_covered.sql: -------------------------------------------------------------------------------- 1 | select 2 | extract(second from sysdate - max(sample_time)) seconds_since_most_recent , 3 | extract(minute from sysdate - min(sample_time)) minutes_since_least_recent, 4 | extract(minute from max(sample_time) - min(sample_time)) minutes_covered 5 | from 6 | v$active_session_history; 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/active/session_history/session_states.sql: -------------------------------------------------------------------------------- 1 | select 2 | --count(*), 3 | session_state 4 | from 5 | v$active_session_History 6 | group by 7 | session_state; 8 | -- 9 | -- WAITING 10 | -- ON CPU 11 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/archive/dest/show-destinations.sql: -------------------------------------------------------------------------------- 1 | select 2 | dest_id, 3 | destination 4 | from 5 | v$archive_dest 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/bh/compare-with_Buffer_Cache_Size.sql: -------------------------------------------------------------------------------- 1 | select 2 | to_char((select count(*) from v$bh), '999,999,999') cnt_bh, 3 | to_char((select 4 | bytes/(select value from v$parameter where name = 'db_block_size') 5 | from 6 | v$sgainfo 7 | where 8 | name = 'Buffer Cache Size' 9 | ), '999,999,999') buf_cache_size 10 | from 11 | dual; 12 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/controlfile/show.sql: -------------------------------------------------------------------------------- 1 | select * from v$controlfile; 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/database_incarnation/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | incarnation# i, 3 | status, 4 | resetlogs_time, 5 | prior_resetlogs_time, 6 | resetlogs_id, 7 | flashback_database_allowed 8 | resetlogs_change#, 9 | prior_resetlogs_change# 10 | from 11 | v$database_incarnation 12 | order by 13 | incarnation# desc; 14 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/database_key_info/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | encryptionalg, 3 | encrytpedkey, -- (sic!) 4 | masterkeyid 5 | from 6 | v$database_key_info; 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/datafile/README.md: -------------------------------------------------------------------------------- 1 | Compare to `v$dbfile`. 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/datafile/header/last-checkpoint.sql: -------------------------------------------------------------------------------- 1 | select 2 | substr(name, 1, 100) data_file, 3 | checkpoint_change# scn, 4 | to_char(checkpoint_time, 'dd.mm.yyyy hh24:mi:ss') date_ 5 | from 6 | v$datafile_header; 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/db_transportable_platform/README.md: -------------------------------------------------------------------------------- 1 | Compare with `v$transportable_platform` 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/db_transportable_platform/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | platform_id, 3 | platform_name, 4 | endian_format 5 | from 6 | v$db_transportable_platform 7 | order by 8 | lower(platform_name); 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/dbfile/compare-to-datafile.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- The resultset of the following query should be empty: 3 | -- 4 | ( select name from v$datafile minus select name from v$dbfile ) union all 5 | ( select name from v$dbfile minus select name from v$datafile); 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/dblink/README.md: -------------------------------------------------------------------------------- 1 | # v$dblink 2 | 3 | Shows *open* database links in the current session. 4 | 5 | Use [dba_db_links](https://github.com/ReneNyffenegger/oracle-patterns/blob/master/Installed/data-dictionary/db_links/show.sql) 6 | to show all database links. 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/enqueue_lock/compare-to-lock.sql: -------------------------------------------------------------------------------- 1 | select addr, kaddr, sid, type, id1, id2, lmode, request, block from v$enqueue_lock minus 2 | select addr, kaddr, sid, type, id1, id2, lmode, request, block from v$lock; 3 | 4 | select addr, kaddr, sid, type, id1, id2, lmode, request, block from v$lock minus 5 | select addr, kaddr, sid, type, id1, id2, lmode, request, block from v$enqueue_lock; 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/enqueue_statistics/cum_wait_time.sql: -------------------------------------------------------------------------------- 1 | select * from v$enqueue_statistics order by cum_wait_time desc; 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/filemetric/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | df.name, 3 | physical_reads, 4 | physical_writes, 5 | physical_block_reads, 6 | physical_block_writes, 7 | -- 8 | round(average_read_time , 2) avg_read_tm, 9 | round(average_write_time , 2) avg_write_tm 10 | from 11 | v$filemetric fm join 12 | v$dbfile df on fm.file_id = df.file# 13 | order by 14 | greatest(average_read_time, average_write_time) desc; 15 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/indexed_fixed_column/column_name.sql: -------------------------------------------------------------------------------- 1 | select 2 | ft.name, 3 | ic.column_name 4 | from 5 | v$fixed_table ft join 6 | v$indexed_fixed_column ic on ft.name = ic.table_name 7 | order by 8 | ft.name, 9 | ic.index_number; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/iostat/function/function_names.sql: -------------------------------------------------------------------------------- 1 | select 2 | function_id, 3 | function_name 4 | from 5 | v$iostat_function 6 | order by 7 | lower(function_name); 8 | -- 3 ARCH 9 | --12 Archive Manager 10 | -- 8 Buffer Cache Reads 11 | -- 6 Data Pump 12 | -- 1 DBWR 13 | -- 9 Direct Reads 14 | --10 Direct Writes 15 | -- 2 LGWR 16 | --13 Others 17 | -- 7 Recovery 18 | -- 0 RMAN 19 | --11 Smart Scan 20 | -- 5 Streams AQ 21 | -- 4 XDB 22 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/java/library_cache_memory/namespaces.sql: -------------------------------------------------------------------------------- 1 | select 2 | lc_namespace 3 | from 4 | v$java_library_cache_memory 5 | order by 6 | lower(lc_namespace); 7 | -- BODY 8 | -- CLUSTER 9 | -- INDEX 10 | -- JAVA DATA 11 | -- JAVA RESOURCE 12 | -- JAVA SOURCE 13 | -- OBJECT 14 | -- OTHER/SYSTEM 15 | -- PIPE 16 | -- SQL AREA 17 | -- TABLE/PROCEDURE 18 | -- TRIGGER 19 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/latch/holder/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | lah.laddr latch_address, 3 | lah.name latch_name, 4 | prc.latchwait, 5 | prc.latchspin, 6 | prc.pname, 7 | prc.username prc_username, 8 | ses.username ses_username, 9 | ses.osuser, 10 | lah.gets 11 | from 12 | v$latchholder lah join 13 | v$session ses on lah.sid = ses.sid join 14 | v$process prc on lah.pid = prc.pid; 15 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/latch/show-statistics.sql: -------------------------------------------------------------------------------- 1 | select 2 | --lnm.name, 3 | lat.name, 4 | lat.addr, 5 | lat.gets, 6 | lat.misses, 7 | lat.sleeps, 8 | lat.immediate_gets, 9 | lat.immediate_misses, 10 | lah.pid latch_holder_pid 11 | from 12 | v$latch lat left join 13 | v$latchholder lah on lat.addr = lah.laddr /*left join 14 | v$latchname lnm on lat.latch# = lnm.latch# */ 15 | order by 16 | lat.gets desc; 17 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/license/show.sql: -------------------------------------------------------------------------------- 1 | select * from v$license; 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/mystat/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | nam.name, 3 | mys.value 4 | from 5 | v$mystat mys join 6 | v$statname nam on mys.statistic# = nam.statistic# 7 | order by 8 | nam.name; 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/open_cursor/cursor_types.sql: -------------------------------------------------------------------------------- 1 | select 2 | --count(*), 3 | cursor_type 4 | from 5 | v$open_cursor 6 | group by 7 | cursor_type 8 | order by 9 | cursor_type; 10 | -- BUNDLE DICTIONARY LOOKUP CACHED 11 | -- DICTIONARY LOOKUP CURSOR CACHED 12 | -- OPEN 13 | -- OPEN-PL/SQL 14 | -- OPEN-RECURSIVE 15 | -- PL/SQL CURSOR CACHED 16 | -- SESSION CURSOR CACHED 17 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/parameter/README.md: -------------------------------------------------------------------------------- 1 | See also `v$obsolete_parameter`. 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/pq/sesstat/show-statistics.sql: -------------------------------------------------------------------------------- 1 | select * from v$pq_sesstat order by statistic; 2 | 3 | select /*+ parallel */ count(*) from all_objects; 4 | 5 | select * from v$pq_sesstat order by statistic; 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/pq/slave/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | slave_name, 3 | status, -- BUSY, IDLE 4 | sessions, 5 | idle_time_cur, 6 | busy_time_cur, 7 | cpu_secs_cur, 8 | msgs_sent_cur, 9 | msgs_rcvd_cur, 10 | idle_time_total, 11 | busy_time_total, 12 | cpu_secs_total, 13 | msgs_sent_total, 14 | msgs_rcvd_total 15 | from 16 | v$pq_slave; 17 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/process/joins.sql: -------------------------------------------------------------------------------- 1 | select 2 | prc.pid, 3 | prc.serial#, 4 | prc.program, 5 | bgp.description bg_process, 6 | pxp.status px_status 7 | from 8 | v$process prc left join 9 | v$px_process pxp on prc.pid = pxp.pid left join 10 | v$bgprocess bgp on prc.addr = bgp.paddr; 11 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/process_memory/categories.sql: -------------------------------------------------------------------------------- 1 | select 2 | --count(*), 3 | category 4 | from 5 | v$process_memory 6 | group by 7 | category 8 | order by 9 | category; 10 | -- Freeable 11 | -- Other 12 | -- PL/SQL 13 | -- SQL 14 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/reserved_words/keywords.sql: -------------------------------------------------------------------------------- 1 | select 2 | lower(keyword) keyword, 3 | reserved, 4 | res_type, 5 | res_attr, 6 | res_semi, 7 | duplicate 8 | from 9 | v$reserved_words order by keyword; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/rman/backup_type/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | weight, 3 | lower(input_type) input_type 4 | from 5 | v$rman_backup_type 6 | order by 7 | input_type; 8 | -- 9 | -- 4 archivelog 10 | -- 1 backupset 11 | -- 3 controlfile 12 | -- 6 datafile full 13 | -- 5 datafile incr 14 | -- 9 db full 15 | -- 7 db incr 16 | -- 8 recvr area 17 | -- 2 spfile 18 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/segment_statistics/names.sql: -------------------------------------------------------------------------------- 1 | select 2 | distinct statistic_name 3 | from 4 | v$segment_statistics 5 | minus 6 | select 7 | name 8 | from 9 | v$segstat_name; 10 | 11 | --- 12 | 13 | select 14 | name 15 | from 16 | v$segstat_name 17 | minus 18 | select 19 | distinct statistic_name 20 | from 21 | v$segment_statistics 22 | ; 23 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sess/io/own-sessions-statistics.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Show session io statistics for executing session 3 | -- 4 | select 5 | sio.block_gets, 6 | sio.consistent_gets, 7 | sio.physical_reads, 8 | sio.block_changes, 9 | sio.consistent_changes, 10 | sio.optimized_physical_reads 11 | from 12 | v$session ses join 13 | v$sess_io sio on ses.sid = sio.sid 14 | where 15 | ses.audsid = sys_context('userenv', 'sessionid'); 16 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/.gitignore: -------------------------------------------------------------------------------- 1 | Oracle.DataAccess.dll 2 | set-action-etc.exe 3 | set-action-etc.pdb 4 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/connect_info/own-sessions-values.sql: -------------------------------------------------------------------------------- 1 | select 2 | sci.authentication_type, 3 | sci.osuser, 4 | sci.client_charset, 5 | sci.client_connection, 6 | sci.client_oci_library, 7 | sci.client_version, 8 | sci.client_driver, 9 | sci.client_lobattr, 10 | sci.network_service_banner, 11 | sci.client_regid 12 | from 13 | v$session ses join 14 | v$session_connect_info sci on ses.sid = sci.sid 15 | where 16 | ses.audsid = sys_context('userenv', 'sessionid'); 17 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/cursor_cache/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | maximum, 3 | (select value from v$parameter2 where name = 'session_cached_cursors') session_cached_cursors, 4 | count, 5 | opens, 6 | hits, 7 | hit_ratio 8 | from 9 | v$session_cursor_cache; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/distinct_values.sql: -------------------------------------------------------------------------------- 1 | select 2 | count( * ), 3 | count(distinct saddr ), 4 | count(distinct sid ), 5 | count(distinct serial#), 6 | count(distinct paddr ), 7 | count( taddr ), 8 | count(distinct taddr ) 9 | from 10 | v$session; 11 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/module-action.sql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | dbms_application_info.set_module ( 4 | module_name => 'tq84_module', 5 | action_name => 'tq84_action' 6 | ); 7 | 8 | end; 9 | / 10 | 11 | select 12 | sid, 13 | to_number(sys_context('userenv', 'sid')) sid_verify, 14 | action 15 | from 16 | v$session 17 | where 18 | module = 'tq84_module'; 19 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/session/module_hash.sql: -------------------------------------------------------------------------------- 1 | select 2 | module, 3 | module_hash, 4 | ora_hash(module) 5 | from 6 | v$session 7 | where 8 | module_hash != ora_hash(module); 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sesstat/show-statistics.sql: -------------------------------------------------------------------------------- 1 | select 2 | sest.sid, 3 | stat.name, 4 | sest.value 5 | from 6 | v$sesstat sest join 7 | v$statname stat on sest.statistic# = stat.statistic# 8 | ; 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sga/dynamic_componentes/usage.sql: -------------------------------------------------------------------------------- 1 | select 2 | component, 3 | to_char(current_size / 1024/1024, '999,999') size_mb 4 | from 5 | v$sga_dynamic_components 6 | order by 7 | current_size desc; 8 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sga/names.sql: -------------------------------------------------------------------------------- 1 | select 2 | name 3 | from 4 | v$sga 5 | order by 6 | name; 7 | -- 8 | -- Fixed Size 9 | -- Variable Size 10 | -- Database Buffers 11 | -- Redo Buffers 12 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/area/address-unique.sql: -------------------------------------------------------------------------------- 1 | select 2 | count(*), 3 | address 4 | from 5 | v$sqlarea 6 | group by 7 | address 8 | order by 9 | count(*) desc; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/area/memory-usage.sql: -------------------------------------------------------------------------------- 1 | select 2 | to_char(sum(sharable_mem ) / 1024/1024, '999,999') total_sharable_mem_mb, 3 | to_char(sum(persistent_mem) / 1024/1024, '999,999') total_persistent_mem_mb, 4 | to_char(sum(runtime_mem ) / 1024/1024, '999,999') total_runtime_mem_mb 5 | from 6 | v$sqlarea; 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/area/sql_id-unique.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- sql_id is unique in v$sqlarea: 3 | -- 4 | select 5 | count(*), 6 | sql_id 7 | from 8 | v$sqlarea 9 | group by 10 | sql_id 11 | order by 12 | count(*) desc; 13 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/command/count-nouns.sql: -------------------------------------------------------------------------------- 1 | select 2 | count(*), 3 | noun 4 | from 5 | sqlcommand_verb_noun 6 | where 7 | noun is not null 8 | group by 9 | noun 10 | order by 11 | noun 12 | ; 13 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/command/count-verbs.sql: -------------------------------------------------------------------------------- 1 | select 2 | count(*), 3 | verb 4 | from 5 | sqlcommand_verb_noun 6 | where 7 | verb is not null 8 | group by 9 | verb 10 | order by 11 | verb 12 | ; 13 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/command/only-verb-statements.sql: -------------------------------------------------------------------------------- 1 | select 2 | verb 3 | from 4 | sqlcommand_verb_noun 5 | where 6 | noun is null 7 | order by 8 | verb; 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/cursor/join-sqlarea.sql: -------------------------------------------------------------------------------- 1 | select 2 | cur.status, 3 | cur.child_pin, 4 | cur.pers_heap_mem, 5 | cur.work_heap_mem, 6 | cur.bind_vars, 7 | sql.sql_text 8 | from 9 | v$sql_cursor cur join 10 | v$sqlarea sql on cur.parent_handle = sql.address 11 | ; 12 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/plan/column-position-id-eq-0.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | v$sql_plan 4 | where 5 | id = 0 and 6 | nvl(position, -1) <> nvl(cost,-1) 7 | ; 8 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/text/tq84.sql: -------------------------------------------------------------------------------- 1 | select /* tq84-tq84 */ 2 | t.sql_text 3 | from 4 | v$sqlarea a join 5 | v$sqltext t on a.sql_id = t.sql_id 6 | where 7 | a.sql_text like '%tq84-tq84%' 8 | order by 9 | t.piece; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/text_with_newlines/listagg.sql: -------------------------------------------------------------------------------- 1 | select /* tq84: v$sqltext_with_newlines */ 2 | listagg(t.sql_text, '') within group (order by t.piece) 3 | from 4 | v$sqlarea a join 5 | v$sqltext_with_newlines t on a.sql_id = t.sql_id 6 | where 7 | a.sql_text like '%tq84: v$sqltext_with_newlines %' 8 | order by 9 | t.piece; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sql/text_with_newlines/sqlid-to-stmt.sql: -------------------------------------------------------------------------------- 1 | select 2 | listagg(t.sql_text, '') within group (order by t.piece) 3 | from 4 | v$sqltext_with_newlines t 5 | where 6 | t.sql_id = '...'; 7 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/statistics_level/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | statistics_name, 3 | description, 4 | statistics_view_name 5 | from 6 | v$statistics_level 7 | order by 8 | lower(statistics_name); 9 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/sys_time_model/order-by-value.sql: -------------------------------------------------------------------------------- 1 | select 2 | stat_name, 3 | to_char(value/1024/1024, '999,999,990.00') seconds 4 | from 5 | v$sys_time_model 6 | order by 7 | value desc; 8 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/system/event/order-by-time_waited.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | v$system_event 4 | order by 5 | time_waited desc; 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/system/wait_class/wait_classes.sql: -------------------------------------------------------------------------------- 1 | select 2 | wait_class 3 | from 4 | v$system_wait_class 5 | order by 6 | wait_class; 7 | -- 8 | -- Administrative 9 | -- Application 10 | -- Commit 11 | -- Concurrency 12 | -- Configuration 13 | -- Idle 14 | -- Network 15 | -- Other 16 | -- System I/O 17 | -- User I/O 18 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/tablespace/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | ts#, 3 | name, 4 | included_in_database_backup, 5 | bigfile, 6 | flashback_on, 7 | encrypt_in_backup 8 | from 9 | v$tablespace 10 | order by 11 | name; 12 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/timezone/file/show.sql: -------------------------------------------------------------------------------- 1 | select 2 | filename, 3 | version 4 | from 5 | v$timezone_file; 6 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/transaction/join_session.sql: -------------------------------------------------------------------------------- 1 | select 2 | trx.addr, 3 | ses.taddr, 4 | trx.ses_addr, 5 | ses.saddr, 6 | case when trx.addr != ses.taddr then 'trx.addr != ses.taddr' end cmp_taddr 7 | from 8 | v$transaction trx left join 9 | v$session ses on trx.ses_addr = ses.saddr; 10 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/transportable_platform/README.md: -------------------------------------------------------------------------------- 1 | Compare with `v$db_transportable_platform` 2 | -------------------------------------------------------------------------------- /Installed/dynamic-performance-views/version/select.sql: -------------------------------------------------------------------------------- 1 | select 2 | banner, 3 | banner_full, 4 | banner_legacy, 5 | con_id 6 | from 7 | v$version; 8 | -------------------------------------------------------------------------------- /Installed/htf/.gitignore: -------------------------------------------------------------------------------- 1 | simple-html-document.html 2 | -------------------------------------------------------------------------------- /Installed/htf/escape_sc.sql: -------------------------------------------------------------------------------- 1 | set define off 2 | select 3 | htf.escape_sc 4 | ( 5 | 'bar & baz / bar''n "baz"' 6 | ) 7 | from dual; 8 | -- 9 | -- <foo>bar & baz / bar'n "baz"</foo> 10 | -- 11 | -------------------------------------------------------------------------------- /Installed/types/any/passAnyObject/types.sql: -------------------------------------------------------------------------------- 1 | drop type type_one; 2 | create type type_one as object ( 3 | foo number (5,2), 4 | bar varchar2(100 byte), 5 | baz date 6 | ); 7 | / 8 | 9 | drop type type_two; 10 | create type type_two as object ( 11 | a number(5,2), 12 | b char (5 byte) 13 | ); 14 | / 15 | 16 | -- TODO... 17 | -- create type type_two_t as table of type_two; 18 | -- / 19 | -------------------------------------------------------------------------------- /Installed/utl/compress/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | 3 | [zipper](https://github.com/ReneNyffenegger/oracle_scriptlets/tree/master/zipper) 4 | -------------------------------------------------------------------------------- /Installed/utl/file/delete_created_file.plsql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | utl_file.fremove('TMP_DIR', 'utl_file.test'); 4 | 5 | -- Directory not needed anymore: 6 | execute immediate 'drop directory TMP_DIR'; 7 | 8 | end; 9 | / 10 | -------------------------------------------------------------------------------- /Installed/utl/file/read_created_file.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | f utl_file.file_type; 4 | 5 | line varchar2(100); 6 | 7 | begin 8 | 9 | f := utl_file.fopen('TMP_DIR', 'utl_file.test', 'R'); 10 | 11 | utl_file.get_line(f, line); dbms_output.put_line(line); 12 | utl_file.get_line(f, line); dbms_output.put_line(line); 13 | 14 | utl_file.fclose(f); 15 | 16 | end; 17 | / 18 | -------------------------------------------------------------------------------- /Installed/utl/file/read_created_file_until_end.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | f utl_file.file_type; 4 | 5 | line varchar2(100); 6 | 7 | begin 8 | 9 | f := utl_file.fopen('TMP_DIR', 'utl_file.test', 'R'); 10 | 11 | begin loop 12 | 13 | utl_file.get_line(f, line); 14 | dbms_output.put_line(line); 15 | 16 | end loop; 17 | 18 | exception when no_data_found then 19 | null; -- Last line read read 20 | end; 21 | 22 | utl_file.fclose(f); 23 | 24 | end; 25 | / 26 | -------------------------------------------------------------------------------- /Installed/utl/i18n/get_local_languages.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | languages utl_i18n.string_array; 3 | langNo number; 4 | begin 5 | 6 | languages := utl_i18n.get_local_languages('Switzerland'); 7 | 8 | langNo := languages.first; 9 | while langNo is not null loop 10 | dbms_output.put_line(langNo || ': ' || initcap(languages(langNo))); 11 | langNo := languages.next(langNo); 12 | end loop; 13 | 14 | end; 15 | / 16 | -- 0: German 17 | -- 1: French 18 | -- 2: Italian 19 | -------------------------------------------------------------------------------- /Installed/utl/i18n/get_local_territories.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | territories utl_i18n.string_array; 4 | terrNo number; 5 | 6 | begin 7 | 8 | territories := utl_i18n.get_local_territories('German'); 9 | 10 | terrNo := territories.first; 11 | while terrNo is not null loop 12 | dbms_output.put_line(terrNo || ': ' || initcap(territories(terrNo))); 13 | terrNo := territories.next(terrNo); 14 | end loop; 15 | 16 | end; 17 | / 18 | -- 0: Germany 19 | -- 1: Austria 20 | -- 2: Luxembourg 21 | -- 3: Switzerland 22 | -------------------------------------------------------------------------------- /Installed/utl/ident/schow_constants.sql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | function b2v(b boolean) return varchar2 is -- { 4 | begin 5 | if b then return 'true'; end if; 6 | return 'false'; 7 | end b2v; -- } 8 | 9 | begin 10 | 11 | dbms_output.put_line('is_oracle_server: ' || b2v(utl_ident.is_oracle_server)); 12 | dbms_output.put_line('is_oracle_client: ' || b2v(utl_ident.is_oracle_client)); 13 | dbms_output.put_line('is_timesten: ' || b2v(utl_ident.is_timesten )); 14 | 15 | end; 16 | / 17 | -------------------------------------------------------------------------------- /Installed/utl/mail/send_mail.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | -- 3 | -- 4 | -- @?/rdbms/admin/utlmail.sql 5 | -- @?/rdbms/admin/prvtmail.plb 6 | -- 7 | -- grant execute on utl_mail to some_user; 8 | -- 9 | -- alter system set smtp_out_server = 'some.mail.server.xyz'; 10 | -- 11 | begin 12 | 13 | sys.utl_mail.send( 14 | sender => 'foo@bar.xy', 15 | recipients => 'someone.else@bar.xy', 16 | subject => 'utl_mail test', 17 | message => 'This is a test. Does it work?' 18 | ); 19 | 20 | end; 21 | / 22 | -------------------------------------------------------------------------------- /Installed/utl/raw/cast_to_varchar2: -------------------------------------------------------------------------------- 1 | select 2 | utl_raw.cast_to_varchar2( 3 | hextoraw ( 4 | '48' || -- H 5 | '65' || -- e 6 | '6C' || -- l 7 | '6C' || -- l 8 | '6F' || -- o 9 | '20' || -- 10 | '77' || -- W 11 | '6F' || -- o 12 | '72' || -- r 13 | '6C' || -- l 14 | '64' -- d 15 | ) 16 | ) say_hello 17 | from 18 | dual; 19 | -------------------------------------------------------------------------------- /Installed/utl/raw/xrange.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | range varchar2(200); 3 | begin 4 | range := utl_raw.xrange('6A', '82'); 5 | dbms_output.put_line(range); 6 | -- 6A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182 7 | 8 | dbms_output.put_line(regexp_replace(range, '(..)', '\1 - ')); 9 | -- 6A - 6B - 6C - 6D - 6E - 6F - 70 - 71 - 72 - 73 - 74 - 75 - 76 - 77 - 78 - 79 - 7A - 7B - 7C - 7D - 7E - 7F - 80 - 81 - 82 - 10 | end; 11 | / 12 | -------------------------------------------------------------------------------- /Installed/utl/smtp/README.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | 3 | [mailer](https://github.com/ReneNyffenegger/oracle_scriptlets/tree/master/mailer) 4 | -------------------------------------------------------------------------------- /Installed/utl/xml/parse/grant-execute.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | grant execute on utl_xml_lib to rene; 3 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/bulk-collect.sql: -------------------------------------------------------------------------------- 1 | create or replace function return_objects ( 2 | p_max_num_rows in number 3 | ) 4 | return t_table as 5 | v_ret t_table; 6 | begin 7 | 8 | select 9 | t_record(rownum, object_name) 10 | bulk collect into 11 | v_ret 12 | from 13 | user_objects 14 | where 15 | rownum <= p_max_num_rows; 16 | 17 | return v_ret; 18 | 19 | end return_objects; 20 | / 21 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop type t_table; 2 | drop type t_record; 3 | drop function return_table; 4 | drop function return_objects; 5 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/create-record-type.sql: -------------------------------------------------------------------------------- 1 | create or replace type t_record as object ( 2 | i number, 3 | n varchar2(30) 4 | ); 5 | / 6 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/create-table-type.sql: -------------------------------------------------------------------------------- 1 | create or replace type t_table as table of t_record; 2 | / 3 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/select-from-function-2.sql: -------------------------------------------------------------------------------- 1 | select * from table(return_objects(5)); 2 | -------------------------------------------------------------------------------- /PL-SQL/CollectionTypes/return-table-from-function/select-from-function.sql: -------------------------------------------------------------------------------- 1 | select * from table(return_table); 2 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/_run.sql: -------------------------------------------------------------------------------- 1 | @create-users.sql 2 | 3 | @proc-owner-tables.sql 4 | @proc-owner-log_msg.sql 5 | @proc-owner-read_t_current_user.sql 6 | @proc-owner-read_u_definer.sql 7 | @grant-execute-to-proc-user.sql 8 | 9 | @proc-user-tables.sql 10 | @exec-read_t_current_user.sql 11 | @exec-read_u_definer.sql 12 | 13 | @clean-up.sql 14 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/clean-up.sql: -------------------------------------------------------------------------------- 1 | connect rene/rene 2 | 3 | drop user proc_owner cascade; 4 | drop user proc_user cascade; 5 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/create-users.sql: -------------------------------------------------------------------------------- 1 | connect rene/rene 2 | 3 | create user proc_owner identified by pw default tablespace data quota unlimited on data; 4 | create user proc_user identified by pw default tablespace data quota unlimited on data; 5 | 6 | grant create session, create procedure, create table, create view to proc_owner; 7 | grant create session, create procedure, create table, create view to proc_user ; 8 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/exec-read_t_current_user.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | begin 3 | proc_owner.read_t_current_user; 4 | end; 5 | / 6 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/exec-read_u_definer.sql: -------------------------------------------------------------------------------- 1 | begin 2 | proc_owner.read_u_definer; 3 | end; 4 | / 5 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/grant-execute-to-proc-user.sql: -------------------------------------------------------------------------------- 1 | grant execute on read_t_current_user to proc_user; 2 | grant execute on read_u_definer to proc_user; 3 | 4 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/proc-owner-log_msg.sql: -------------------------------------------------------------------------------- 1 | create procedure log_msg(msg varchar2) as begin 2 | dbms_output.put_line('PROC_OWNER: ' || msg); 3 | end log_msg; 4 | / 5 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/proc-owner-read_t_current_user.sql: -------------------------------------------------------------------------------- 1 | create procedure read_t_current_user 2 | AUTHID CURRENT_USER 3 | as begin 4 | for rec in (select txt from t) loop 5 | log_msg(rec.txt); 6 | end loop; 7 | end; 8 | / 9 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/proc-owner-read_u_definer.sql: -------------------------------------------------------------------------------- 1 | create procedure read_u_definer 2 | AUTHID DEFINER 3 | as begin 4 | for rec in (select txt from u) loop 5 | log_msg(rec.txt); 6 | end loop; 7 | end; 8 | / 9 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/proc-owner-tables.sql: -------------------------------------------------------------------------------- 1 | connect proc_owner/pw; 2 | 3 | create table t (txt varchar2(40)); 4 | insert into t values (q'!This is proc_owner's table!'); 5 | 6 | create table u (txt varchar2(40)); 7 | insert into u values (q'!This is proc_owner's table!'); 8 | 9 | grant select on t to proc_user; 10 | -- no grant on u 11 | -------------------------------------------------------------------------------- /PL-SQL/authid/example-01/proc-user-tables.sql: -------------------------------------------------------------------------------- 1 | connect proc_user/pw; 2 | 3 | create table t (txt varchar2(40)); 4 | insert into t values (q'!This is proc_user's table!'); 5 | 6 | create table u (txt varchar2(40)); 7 | insert into u values (q'!This is proc_user's table!'); 8 | -------------------------------------------------------------------------------- /PL-SQL/blocks/nested_proc_with_same_name.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | procedure p (a in varchar2) is 4 | 5 | procedure p (a in varchar2) is 6 | begin 7 | 8 | dbms_output.put_line('inner: ' || a); 9 | 10 | end p; 11 | 12 | begin 13 | 14 | p('outer: ' || a); 15 | 16 | end p; 17 | 18 | begin 19 | 20 | p('foo'); 21 | 22 | end; 23 | / 24 | -------------------------------------------------------------------------------- /PL-SQL/compilation/conditional/ErrorDirective.plsql: -------------------------------------------------------------------------------- 1 | prompt create package 2 | create or replace package tq84_error_directive as 3 | 4 | 5 | $IF $$FLAG_VERSION_ERROR $THEN 6 | $ERROR 'At least version 4 required' $END 7 | $END 8 | 9 | end; 10 | / 11 | show errors 12 | 13 | prompt alter session 14 | alter session set plsql_ccflags = 'FLAG_VERSION_ERROR:true'; 15 | 16 | prompt recompile package 17 | alter package tq84_error_directive compile; 18 | show errors package tq84_error_directive; 19 | -------------------------------------------------------------------------------- /PL-SQL/cursor/rowcount.sql: -------------------------------------------------------------------------------- 1 | create table tq84_rowcount (a number); 2 | 3 | insert into tq84_rowcount values ( 42); 4 | insert into tq84_rowcount values ( 12); 5 | insert into tq84_rowcount values (1000); 6 | 7 | 8 | declare 9 | 10 | cursor c is select * from tq84_rowcount; 11 | 12 | begin 13 | 14 | for r in c loop 15 | 16 | dbms_output.put_line(to_char(r.a, '9999') || ' ' || c%rowcount); 17 | 18 | end loop; 19 | 20 | end; 21 | / 22 | 23 | drop table tq84_rowcount purge; 24 | -------------------------------------------------------------------------------- /PL-SQL/exception/pragma_init_with_same_number/catcher.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_catcher as 2 | 3 | procedure go; 4 | 5 | end tq84_catcher; 6 | / 7 | -------------------------------------------------------------------------------- /PL-SQL/exception/pragma_init_with_same_number/thrower_1.pkb: -------------------------------------------------------------------------------- 1 | create or replace package body tq84_thrower_1 as 2 | 3 | procedure go is begin 4 | raise_application_error(-20777, 'Package is tq84_thrower_1'); 5 | end go; 6 | 7 | end tq84_thrower_1; 8 | / 9 | -------------------------------------------------------------------------------- /PL-SQL/exception/pragma_init_with_same_number/thrower_1.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_thrower_1 as 2 | 3 | procedure go; 4 | 5 | exc exception; 6 | pragma exception_init(exc, -20777); 7 | 8 | end tq84_thrower_1; 9 | / 10 | -------------------------------------------------------------------------------- /PL-SQL/exception/pragma_init_with_same_number/thrower_2.pkb: -------------------------------------------------------------------------------- 1 | create or replace package body tq84_thrower_2 as 2 | 3 | procedure go is begin 4 | raise_application_error(-20777, 'Package is tq84_thrower_2'); 5 | end go; 6 | 7 | end tq84_thrower_2; 8 | / 9 | -------------------------------------------------------------------------------- /PL-SQL/exception/pragma_init_with_same_number/thrower_2.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_thrower_2 as 2 | 3 | procedure go; 4 | 5 | exc exception; 6 | pragma exception_init(exc, -20777); 7 | 8 | end tq84_thrower_2; 9 | / 10 | -------------------------------------------------------------------------------- /PL-SQL/exception/thrower_and_catcher/catcher.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_catcher as 2 | 3 | procedure go; 4 | 5 | end tq84_catcher; 6 | / 7 | -------------------------------------------------------------------------------- /PL-SQL/exception/when_X_or_Y/run.sql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | procedure p(x in number) is 4 | begin 5 | tq84_bar.proc(x); 6 | exception 7 | when tq84_foo.exc_one then 8 | dbms_output.put_line('run.sql caught expected exc_one'); 9 | when others then 10 | dbms_output.put_line('run.sql caught other error'); 11 | end p; 12 | 13 | 14 | begin 15 | 16 | p(1); 17 | p(2); 18 | p(3); 19 | 20 | end; 21 | / 22 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/into.plsql: -------------------------------------------------------------------------------- 1 | create table tq84_exec_imm ( 2 | a number, 3 | b number 4 | ); 5 | 6 | insert into tq84_exec_imm values (1,2); 7 | 8 | declare 9 | a number; 10 | b number; 11 | begin 12 | 13 | execute immediate 'select a, b from tq84_exec_imm' into a, b; 14 | 15 | dbms_output.put_line('a: ' || a || ', b: ' || b); 16 | 17 | end; 18 | / 19 | 20 | 21 | drop table tq84_exec_imm purge; 22 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/into_rowtype.plsql: -------------------------------------------------------------------------------- 1 | create table tq84_exec_imm ( 2 | a number, 3 | b number 4 | ); 5 | 6 | insert into tq84_exec_imm values (1,2); 7 | 8 | declare 9 | r tq84_exec_imm%rowtype; 10 | begin 11 | 12 | execute immediate 'select * from tq84_exec_imm' into r; 13 | 14 | dbms_output.put_line('a: ' || r.a || ', b: ' || r.b); 15 | 16 | end; 17 | / 18 | 19 | 20 | drop table tq84_exec_imm purge; 21 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/using_in_out.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | n number := 21; 4 | 5 | begin 6 | 7 | execute immediate 'begin :1 := :1 * 2; end;' using in out n; 8 | 9 | dbms_output.put_line('n: ' || n); 10 | 11 | end; 12 | / 13 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/using_out.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | 3 | n number; 4 | 5 | begin 6 | 7 | execute immediate 'begin :1 := 42; end;' using out n; 8 | 9 | dbms_output.put_line('n: ' || n); 10 | 11 | end; 12 | / 13 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/using_out_2.plsql: -------------------------------------------------------------------------------- 1 | declare 2 | n number; 3 | begin 4 | 5 | execute immediate 'declare l number; begin l := 42; :1 := l; end;' using out n; 6 | 7 | dbms_output.put_line('n: ' || n); 8 | 9 | end; 10 | / 11 | -------------------------------------------------------------------------------- /PL-SQL/execute_immediate/using_out_nested_type.plsql: -------------------------------------------------------------------------------- 1 | create type tq84_number_t as table of number; 2 | / 3 | 4 | 5 | 6 | declare 7 | number_t tq84_number_t; 8 | begin 9 | 10 | execute immediate 11 | 'begin :1 := tq84_number_t(42,null,-1.2, 1e7); end;' 12 | using out number_t; 13 | 14 | 15 | for i in 1 .. number_t.count loop 16 | dbms_output.put_line('i: ' || number_t(i)); 17 | end loop; 18 | 19 | end; 20 | / 21 | 22 | drop type tq84_number_t; 23 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/_run.sql: -------------------------------------------------------------------------------- 1 | @log-table 2 | @func 3 | @select 4 | @select-count-from-log-table 5 | @clean-up 6 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_call_log; 2 | drop function tq84_double; 3 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/func.sql: -------------------------------------------------------------------------------- 1 | create or replace function tq84_double(i number) return number deterministic 2 | is 3 | procedure write_log_entry 4 | is 5 | pragma autonomous_transaction; 6 | begin 7 | insert into tq84_call_log values (systimestamp, i); 8 | commit; 9 | end write_log_entry; 10 | begin 11 | write_log_entry; 12 | return i*2; 13 | end tq84_double; 14 | / 15 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/log-table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_call_log ( 2 | tm timestamp(6), 3 | param_value number 4 | ); 5 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/select-count-from-log-table.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_call_log; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/cache-result/select.sql: -------------------------------------------------------------------------------- 1 | set rowprefetch 20 2 | set arraysize 99 3 | 4 | truncate table tq84_call_log; 5 | select 6 | mod(level-1, 17) a, 7 | tq84_double(mod(level-1, 17)) b 8 | from 9 | dual connect by level <= 1000; 10 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/where-clause/_run.sql: -------------------------------------------------------------------------------- 1 | @ pkg 2 | @ tab 3 | @ select 4 | 5 | drop table tq84_tab; 6 | drop package tq84_pkg; 7 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/where-clause/select.sql: -------------------------------------------------------------------------------- 1 | set timing on 2 | 3 | select * from tq84_tab where id = tq84_pkg.f_non_deterministic(1); 4 | select * from tq84_tab where id = tq84_pkg.f_deterministic(1); 5 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/deterministic/where-clause/tab.sql: -------------------------------------------------------------------------------- 1 | create table tq84_tab ( 2 | id number, 3 | tx varchar2(10) 4 | ); 5 | 6 | insert into tq84_tab values (1, 'one'); 7 | insert into tq84_tab values (2, 'two'); 8 | insert into tq84_tab values (3, 'three'); 9 | 10 | commit; 11 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/_run.sql: -------------------------------------------------------------------------------- 1 | @table 2 | @funcs 3 | 4 | set timing on 5 | 6 | @select-count 7 | @select-where 8 | 9 | @select-func 10 | @select-result_cache 11 | @select-deterministic 12 | @select-local 13 | 14 | set timing off 15 | 16 | @clean-up 17 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_tab; 2 | drop function tq84_func; 3 | drop function tq84_func_deterministic; 4 | drop function tq84_func_result_cache; 5 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-count.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_tab; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-deterministic.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_tab where tq84_func_deterministic(nm) = 1; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-func.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_tab where tq84_func (nm) = 1; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-local-deterministic.sql: -------------------------------------------------------------------------------- 1 | with function tq84_func_local(nm number) return integer deterministic is 2 | begin 3 | if nm = 42 then return 1; end if; 4 | return 0; 5 | end tq84_func_local; 6 | select count(*) from tq84_tab where tq84_func_local(nm) = 1; 7 | / 8 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-local.sql: -------------------------------------------------------------------------------- 1 | with function tq84_func_local(nm number) return integer is 2 | begin 3 | if nm = 42 then return 1; end if; 4 | return 0; 5 | end tq84_func_local; 6 | select count(*) from tq84_tab where tq84_func_local(nm) = 1; 7 | / 8 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-result_cache.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_tab where tq84_func_result_cache (nm) = 1; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/overhead-in-SQL/where/select-where.sql: -------------------------------------------------------------------------------- 1 | select count(*) from tq84_tab where nm = 42; 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/basic-example/data.sql: -------------------------------------------------------------------------------- 1 | drop table someData purge; 2 | 3 | create table someData ( 4 | id varchar2(5) primary key, 5 | num number, 6 | txt varchar2(20) 7 | ); 8 | 9 | insert into someData values ('foo', 42, 'twenty-four'); 10 | insert into someData values ('bar', 99, 'ninety-nine'); 11 | insert into someData values ('baz', -2, 'minus two' ); 12 | 13 | commit; 14 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/basic-example/func.sql: -------------------------------------------------------------------------------- 1 | create or replace function selectData(p_id varchar2) return varchar2 sql_macro 2 | is begin 3 | 4 | return q'{ 5 | 6 | select 7 | num, 8 | txt 9 | from 10 | someData 11 | where 12 | id = p_id -- Note that p_id is embedded in a string! 13 | }'; 14 | 15 | end selectData; 16 | / 17 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/basic-example/select.sql: -------------------------------------------------------------------------------- 1 | select * from selectData('foo'); 2 | -- NUM TXT 3 | -- ---------- -------------------- 4 | -- 42 twenty-four 5 | 6 | select num, txt from selectData('bar'); 7 | -- 8 | -- NUM TXT 9 | -- ---------- -------------------- 10 | -- 99 ninety-nine 11 | 12 | select txt, num from selectData('baz'); 13 | -- 14 | -- TXT NUM 15 | -- -------------------- ---------- 16 | -- minus two -2 17 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/parameters/create-table.sql: -------------------------------------------------------------------------------- 1 | create table T (txt varchar2(10)); 2 | create table T0 (txt varchar2(10)); 3 | create table T1 (txt varchar2(10)); 4 | 5 | insert into T values ('This is T' ); 6 | insert into T0 values ('This is T0'); 7 | insert into T1 values ('This is T1'); 8 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/parameters/random-table-select.sql: -------------------------------------------------------------------------------- 1 | select * from randomTable(); 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/parameters/random-table.sql: -------------------------------------------------------------------------------- 1 | create or replace function randomTable return varchar2 sql_macro 2 | is 3 | compile_date varchar2(19) := to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'); 4 | begin 5 | 6 | return ' 7 | select 8 | ''' || compile_date || ''' compile_date, 9 | to_char(sysdate, ''yyyy-mm-dd hh24:mi:ss'') exec_date, 10 | txt 11 | from 12 | T' || mod(trunc(extract(second from systimestamp)), 2); 13 | 14 | end randomTable; 15 | / 16 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/parameters/tabN-select-1.sql: -------------------------------------------------------------------------------- 1 | select * from tabN(1); 2 | -------------------------------------------------------------------------------- /PL-SQL/function-procedure/sql_macro/parameters/tabN.sql: -------------------------------------------------------------------------------- 1 | create or replace function tabN(n integer) return varchar2 sql_macro 2 | is 3 | begin 4 | 5 | dbms_output.put_line('tabN being called, n = ' || n); 6 | 7 | return 'select * from T' || mod(n, 2); 8 | 9 | end tabN; 10 | / 11 | -------------------------------------------------------------------------------- /PL-SQL/loop/continue.plsql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | 4 | for i in 1 .. 5 loop 5 | 6 | dbms_output.put_line('i: ' || i || ' '); 7 | 8 | for j in 1 .. 5 loop 9 | 10 | dbms_output.put_line(' j: ' || j); 11 | 12 | continue when i+j > 7; 13 | 14 | dbms_output.put_line('*'); 15 | 16 | 17 | 18 | end loop; 19 | 20 | end loop; 21 | 22 | 23 | dbms_output.put_line('x'); 24 | 25 | 26 | end; 27 | / 28 | -------------------------------------------------------------------------------- /PL-SQL/loop/for_in_x_x.plsql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | dbms_output.put_line('for i in 5 .. 5'); 4 | for i in 5 .. 5 loop 5 | dbms_output.put_line('i: ' || i); 6 | end loop; 7 | 8 | end; 9 | / 10 | -------------------------------------------------------------------------------- /PL-SQL/loop/reverse.plsql: -------------------------------------------------------------------------------- 1 | begin 2 | 3 | for i in REVERSE 1 .. 10 loop 4 | 5 | dbms_output.put_line(i); 6 | 7 | end loop; 8 | 9 | end; 10 | / 11 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/pkg_a.pkb: -------------------------------------------------------------------------------- 1 | create or replace package body tq84_pkg_a as 2 | 3 | procedure prc_1 is begin 4 | null; 5 | end prc_1; 6 | 7 | procedure prc_2 is begin 8 | null; 9 | end prc_2; 10 | 11 | end tq84_pkg_a; 12 | / 13 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/pkg_a.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_pkg_a as 2 | 3 | procedure prc_1; pragma deprecate(prc_1, 'Don''t use tq84_pkg_a.prc_1, use prc_2'); 4 | procedure prc_2; 5 | 6 | end tq84_pkg_a; 7 | / 8 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/pkg_b.pkb: -------------------------------------------------------------------------------- 1 | create or replace package body tq84_pkg_b as 2 | 3 | procedure run is 4 | begin 5 | tq84_pkg_a.prc_1; 6 | end run; 7 | 8 | end tq84_pkg_b; 9 | / 10 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/pkg_b.pks: -------------------------------------------------------------------------------- 1 | create or replace package tq84_pkg_b as 2 | 3 | procedure run; 4 | 5 | end tq84_pkg_b; 6 | / 7 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/recompile.sql: -------------------------------------------------------------------------------- 1 | alter session set plsql_warnings='enable:(6019, 6020, 6021, 6022)'; 2 | alter package tq84_pkg_b compile; 3 | -- 4 | -- SP2-0809: Package altered with compilation warnings 5 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/show-errors.sql: -------------------------------------------------------------------------------- 1 | show errors package body tq84_pkg_b; 2 | 3 | -- LINE/COL ERROR 4 | -- -------- ----------------------------------------------------------------- 5 | -- 5/9 PLW-06020: reference to a deprecated entity: PRC_1 declared in 6 | -- unit TQ84_PKG_A[3,15]. Don't use tq84_pkg_a.prc_1, user prc_2 7 | -------------------------------------------------------------------------------- /PL-SQL/pragma/deprecate/user_errors.sql: -------------------------------------------------------------------------------- 1 | select 2 | name, 3 | type, 4 | text 5 | from 6 | user_errors 7 | where 8 | message_number = 6020; 9 | -------------------------------------------------------------------------------- /SQL/README.md: -------------------------------------------------------------------------------- 1 | 2 | select * from v$sqlcommand order by command_name; 3 | -------------------------------------------------------------------------------- /SQL/_examples/lendings/_run.sql: -------------------------------------------------------------------------------- 1 | alter session set nls_date_format = 'yyyy-mm-dd'; 2 | 3 | @ table 4 | @ data 5 | @ unpivot 6 | @ group-by 7 | @ active-months 8 | @ all-months 9 | @ model 10 | 11 | drop table tq84_lendings; 12 | -------------------------------------------------------------------------------- /SQL/_examples/lendings/data.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_lendings values ('Peter', 'AAA', 4, date '2021-04-14', date '2021-10-04'); 2 | insert into tq84_lendings values ('Peter', 'BBB', 22, date '2021-05-12', date '2021-11-02'); 3 | insert into tq84_lendings values ('Peter', 'CCC', 7, date '2021-09-07', date '2021-10-18'); 4 | insert into tq84_lendings values ('Peter', 'EEE', 9, date '2021-10-16', date '2021-11-15'); 5 | 6 | insert into tq84_lendings values ('Maria', 'ZZZ', 14, date '2021-06-22', date '2021-09-12'); 7 | -------------------------------------------------------------------------------- /SQL/_examples/lendings/table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_lendings ( 2 | whom varchar2(10), 3 | what varchar2( 5), 4 | value_ number ( 5), 5 | start_ date , 6 | end_ date 7 | ); 8 | -------------------------------------------------------------------------------- /SQL/alter/session/commit-in-procedure/_run.sql: -------------------------------------------------------------------------------- 1 | @tab 2 | @pkg 3 | 4 | @exec 5 | 6 | drop package tq84_pkg_commit_test; 7 | drop table tq84_tab_commit_test; 8 | -------------------------------------------------------------------------------- /SQL/alter/session/commit-in-procedure/tab.sql: -------------------------------------------------------------------------------- 1 | create table tq84_tab_commit_test ( 2 | val number 3 | ); 4 | -------------------------------------------------------------------------------- /SQL/alter/session/time_zone.sql: -------------------------------------------------------------------------------- 1 | select 2 | dbtimezone, 3 | sessiontimezone 4 | from 5 | dual; 6 | -- 7 | -- DBTIME SESSIONTIMEZONE 8 | -- ------ ----------------------- 9 | -- +02:00 +01:00 10 | 11 | 12 | alter session set time_zone = '-3:00'; 13 | 14 | select 15 | dbtimezone, 16 | sessiontimezone 17 | from 18 | dual; 19 | -- 20 | -- DBTIME SESSIONTIMEZONE 21 | -- ------ --------------------- 22 | -- +02:00 -03:00 23 | -------------------------------------------------------------------------------- /SQL/datatypes/lob/clob/to-lines/_run.sql: -------------------------------------------------------------------------------- 1 | @ table 2 | @ data 3 | 4 | column line format a20 5 | @ select 6 | 7 | drop table tq84_text; 8 | -------------------------------------------------------------------------------- /SQL/datatypes/lob/clob/to-lines/select.sql: -------------------------------------------------------------------------------- 1 | select 2 | regexp_substr(txt, '.+', 1, level, 'm') line 3 | from 4 | tq84_text 5 | start with 6 | id = 2 7 | connect by 8 | prior id = id and 9 | level <= regexp_count(prior txt, '.+' , 1, 'm') 10 | ; 11 | -------------------------------------------------------------------------------- /SQL/datatypes/lob/clob/to-lines/table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_text ( 2 | id number primary key, 3 | txt clob 4 | ); 5 | -------------------------------------------------------------------------------- /SQL/datatypes/raw/rawtohex.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Determine hex representation of "Hello world" 3 | -- 4 | select 5 | rawtohex( 6 | utl_raw.cast_to_raw('Hello world') 7 | ) hex 8 | from 9 | dual; 10 | 11 | -- 48656C6C6F20776F726C64 12 | -------------------------------------------------------------------------------- /SQL/datatypes/rowid/select.sql: -------------------------------------------------------------------------------- 1 | create table tq84_rowid ( 2 | id number, 3 | col_1 varchar2(20) 4 | ); 5 | 6 | insert into tq84_rowid values(1, 'foo'); 7 | insert into tq84_rowid values(2, 'bar'); 8 | insert into tq84_rowid values(3, 'baz'); 9 | 10 | select 11 | rowid 12 | r.* 13 | from 14 | tq84_rowid r; 15 | 16 | drop table tq84_rowid; 17 | -------------------------------------------------------------------------------- /SQL/datatypes/varchar2/null/concatenate.sql: -------------------------------------------------------------------------------- 1 | select 2 | text_1 || text_2 || NULL concatenated 3 | from 4 | tq84_null_test; 5 | -- 6 | -- CONCATENATED 7 | -- ---------------------------------------- 8 | -- helloworld 9 | -- other is null 10 | -- other is empty 11 | -------------------------------------------------------------------------------- /SQL/datatypes/varchar2/null/create-table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_null_test ( 2 | text_1 varchar2(20), 3 | text_2 varchar2(20) 4 | ); 5 | 6 | insert into tq84_null_test values ('hello', 'world' ); 7 | insert into tq84_null_test values (null , 'other is null' ); 8 | insert into tq84_null_test values ('' , 'other is empty'); 9 | 10 | commit; 11 | -------------------------------------------------------------------------------- /SQL/datatypes/varchar2/null/select-eq-empty-string.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_null_test where text_1 = ''; 2 | -------------------------------------------------------------------------------- /SQL/datatypes/varchar2/null/select-is-null.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_null_test where text_1 is null; 2 | -- 3 | -- TEXT_1 TEXT_2 4 | -- -------------------- -------------------- 5 | -- other is null 6 | -- other is empty 7 | -------------------------------------------------------------------------------- /SQL/functions/conversion/rowid-to-varchar2.sql: -------------------------------------------------------------------------------- 1 | create table tq84_rowid ( 2 | id number, 3 | col_1 varchar2(20) 4 | ); 5 | 6 | insert into tq84_rowid values(1, 'foo'); 7 | insert into tq84_rowid values(2, 'bar'); 8 | insert into tq84_rowid values(3, 'baz'); 9 | 10 | 11 | select 12 | rowid, 13 | rowidtochar(rowid) c 14 | from 15 | tq84_rowid r; 16 | 17 | 18 | drop table tq84_rowid; 19 | -------------------------------------------------------------------------------- /SQL/functions/date_related/dbtimezone.sql: -------------------------------------------------------------------------------- 1 | select 2 | dbtimezone 3 | from 4 | dual; 5 | -- 6 | -- DBTIME 7 | -- ------ 8 | -- +02:00 9 | -------------------------------------------------------------------------------- /SQL/functions/date_related/seconds_to_hh24-mi-ss.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- 12345 seconds are 3 hours, 25 minutes and 45 seconds. 3 | -- 4 | -- http://stackoverflow.com/a/13030680/180275 5 | -- 6 | select to_char( 7 | to_date(12345, 'sssss'), 8 | 'hh24:mi:ss' 9 | ) 10 | from dual; 11 | -------------------------------------------------------------------------------- /SQL/functions/date_related/sessiontimezone.sql: -------------------------------------------------------------------------------- 1 | select 2 | sessiontimezone 3 | from 4 | dual; 5 | -- 6 | -- SESSIONTIMEZONE 7 | -- ----------------------- 8 | -- +01:00 9 | 10 | 11 | alter session set time_zone = '-3:00'; 12 | 13 | select 14 | sessiontimezone 15 | from 16 | dual; 17 | -- 18 | -- SESSIONTIMEZONE 19 | -- --------------------- 20 | -- -03:00 21 | -------------------------------------------------------------------------------- /SQL/functions/date_related/sys_extract_utc.sql: -------------------------------------------------------------------------------- 1 | select 2 | sys_extract_utc(timestamp '2000-10-10 10:00:00 +3:00') utc_ 3 | from 4 | dual; 5 | 6 | -- UTC_ 7 | -- ----------------------------------------------- 8 | -- 10.10.00 07:00:00.000000000 9 | -------------------------------------------------------------------------------- /SQL/functions/date_related/systimestamp.sql: -------------------------------------------------------------------------------- 1 | declare 2 | t0 timestamp; 3 | t1 timestamp; 4 | 5 | diff_interval interval day(0) to second(6); 6 | diff_seconds number; 7 | begin 8 | 9 | t0 := systimestamp; 10 | t1 := systimestamp; 11 | 12 | diff_interval := t1 - t0; 13 | diff_seconds := extract(second from diff_interval); 14 | 15 | 16 | dbms_output.put_line('Diff: ' || diff_seconds || ' seconds.'); 17 | 18 | end; 19 | / 20 | -------------------------------------------------------------------------------- /SQL/functions/null_related/nullif.sql: -------------------------------------------------------------------------------- 1 | with expr as ( 2 | select 'foo' val from dual union all 3 | select 'baz' val from dual union all 4 | select 'bar' val from dual union all 5 | select null val from dual 6 | ) 7 | select 8 | first.val, second.val, 9 | nullif(first.val, second.val) "Null if equal, first otherwise", 10 | case when first.val = second.val then null else first.val end "same same" 11 | from 12 | expr first, expr second 13 | where 14 | first.val is not null; 15 | -------------------------------------------------------------------------------- /SQL/functions/null_related/nvl2.sql: -------------------------------------------------------------------------------- 1 | create table tq84_nvl2 ( 2 | a number 3 | ); 4 | 5 | insert into tq84_nvl2 values (null); 6 | insert into tq84_nvl2 values ( 0); 7 | insert into tq84_nvl2 values ( 42); 8 | 9 | select 10 | a, 11 | nvl2(a, 'not null', 'null') 12 | from 13 | tq84_nvl2; 14 | 15 | drop table tq84_nvl2 purge; 16 | -------------------------------------------------------------------------------- /SQL/functions/regular_expressions/regexp_substr/extract-between-delimiters.sql: -------------------------------------------------------------------------------- 1 | declare 2 | str varchar2(100) := 'foo bar >words and such< baz'; 3 | begin 4 | dbms_output.put_line(regexp_substr( 5 | str , -- Text 6 | '[^><]+', -- Any repetation of characters that don't match the delimiters > and < 7 | 1 , -- Start at first position 8 | 2 -- Second occurence (The first is before >) 9 | ) 10 | ); 11 | end; 12 | / 13 | 14 | -------------------------------------------------------------------------------- /SQL/functions/regular_expressions/regexp_substr/extract-number.sql: -------------------------------------------------------------------------------- 1 | select regexp_substr('foo3245bar', '\d+') from dual; 2 | -- 3 | -- 2345 4 | -------------------------------------------------------------------------------- /SQL/functions/strings/repeating_strings.sql: -------------------------------------------------------------------------------- 1 | declare 2 | result varchar2(100); 3 | str varchar2( 10); 4 | n number; 5 | begin 6 | 7 | str :='foo'; 8 | n := 4; -- repeat 4 times 9 | 10 | result := rpad(str, n*length(str), str); 11 | 12 | dbms_output.put_line('result: ' || result); 13 | end; 14 | / 15 | -------------------------------------------------------------------------------- /SQL/functions/sys_context/userenv_find-own-session.sql: -------------------------------------------------------------------------------- 1 | select 2 | ses.sid, 3 | sys_context('userenv', 'sid' ) ctx_sid, 4 | ses.audsid, 5 | sys_context('userenv', 'sessionid') ctx_sessionid 6 | from 7 | v$session ses 8 | where 9 | ses.sid = sys_context('userenv', 'sid' ) or 10 | ses.audsid = sys_context('userenv', 'sessionid'); 11 | -------------------------------------------------------------------------------- /SQL/functions/sys_guid.sql: -------------------------------------------------------------------------------- 1 | select 2 | sys_guid() 3 | from 4 | dual; 5 | -------------------------------------------------------------------------------- /SQL/functions/text/substr/three-parameters.sql: -------------------------------------------------------------------------------- 1 | select 2 | substr( 3 | '1234567890', -- Text 4 | 5 , -- Start position 5 | 3 -- Length 6 | ) 7 | from 8 | dual; 9 | -- 10 | -- 567 11 | -------------------------------------------------------------------------------- /SQL/functions/text/substr/two-parameters.sql: -------------------------------------------------------------------------------- 1 | select 2 | substr( 3 | '1234567890', -- Text 4 | 5 -- Start position 5 | ) 6 | from 7 | dual; 8 | -- 9 | -- 567890 10 | -------------------------------------------------------------------------------- /SQL/functions/type-conversion/format-models/day-of-week.sql: -------------------------------------------------------------------------------- 1 | alter session set nls_territory='Switzerland'; 2 | select to_char(date '2021-01-01','D') from dual; 3 | -- 4 | -- 5 5 | 6 | alter session set nls_territory='America'; 7 | select to_char(date '2021-01-01','D') from dual; 8 | -- 9 | -- 6 10 | -------------------------------------------------------------------------------- /SQL/functions/type-conversion/format-models/spell-julian-day.sql: -------------------------------------------------------------------------------- 1 | select 2 | to_char(date '-4712-01-01' , 'Jsp') as one, 3 | to_char(date '-4712-01-01' + 41, 'Jsp') as forty_two, 4 | to_char(date '-4712-01-01' + 998, 'Jsp') as nine_nine_nine 5 | from 6 | dual; 7 | -------------------------------------------------------------------------------- /SQL/functions/type-conversion/to/number/default-on-conversion-error.sql: -------------------------------------------------------------------------------- 1 | select 2 | to_number( '22/3' default '-1' on conversion error) n1, 3 | to_number( '22.3' default '-1' on conversion error) n2, 4 | to_number(' 22.3' default '-1' on conversion error) n3, 5 | to_number(' 22.3x' default '-1' on conversion error) n4 6 | from 7 | dual; 8 | -------------------------------------------------------------------------------- /SQL/functions/type-conversion/to/number/nls-param.sql: -------------------------------------------------------------------------------- 1 | select 2 | to_number('123456.78', '999999D99', q'[ nls_numeric_characters = '.,' ]' ) n1, 3 | to_number('123,456.78', '999G999D99', q'[ nls_numeric_characters = '.,' ]' ) n2 4 | from 5 | dual; 6 | -------------------------------------------------------------------------------- /SQL/grant/_run.sql: -------------------------------------------------------------------------------- 1 | @ users-create 2 | 3 | @ table-create 4 | 5 | @ table-select 6 | @ table-update 7 | @ table-select 8 | 9 | @ users-drop 10 | -------------------------------------------------------------------------------- /SQL/grant/table-create.sql: -------------------------------------------------------------------------------- 1 | connect usr_1/pw_1 2 | 3 | create table tab_1 ( 4 | col_1 number, 5 | col_2 varchar2(10), 6 | col_3 varchar2(10), 7 | col_4 varchar2(10) 8 | ); 9 | 10 | insert into tab_1 values (1, 'one', 'foo', 'important'); 11 | insert into tab_1 values (2, 'two', 'bar', 'data!' ); 12 | 13 | grant select, 14 | update( col_2, col_3) 15 | on tab_1 16 | to usr_2; 17 | -------------------------------------------------------------------------------- /SQL/grant/table-select.sql: -------------------------------------------------------------------------------- 1 | connect usr_2/pw_2 2 | 3 | select 4 | * 5 | from 6 | usr_1.tab_1; 7 | -------------------------------------------------------------------------------- /SQL/grant/table-update.sql: -------------------------------------------------------------------------------- 1 | update 2 | usr_1.tab_1 3 | set 4 | col_2 = 'TWO' 5 | where 6 | col_1 = 2; 7 | 8 | -- 9 | -- ORA-01031: insufficient privileges 10 | -- 11 | -- update 12 | -- usr_1.tab_1 13 | -- set 14 | -- col_4 = '***' 15 | -- where 16 | -- col_1 = 1; 17 | -------------------------------------------------------------------------------- /SQL/grant/users-create.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | 3 | create user usr_1 4 | identified by pw_1 5 | default tablespace data 6 | quota unlimited on data; 7 | 8 | create user usr_2 9 | identified by pw_2; 10 | 11 | grant connect, 12 | create table 13 | to usr_1; 14 | 15 | grant connect 16 | to usr_2; 17 | -------------------------------------------------------------------------------- /SQL/grant/users-drop.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | 3 | drop user usr_2; 4 | drop user usr_1 cascade; 5 | -------------------------------------------------------------------------------- /SQL/insert/append_hint_ora_12838.sql: -------------------------------------------------------------------------------- 1 | create table tq84_ora_12838 ( 2 | col_1 number, 3 | col_2 varchar2(30) 4 | ); 5 | 6 | 7 | insert /*+ append */ into tq84_ora_12838 select rownum, object_name from all_objects where rownum < 10; 8 | 9 | -- 10 | -- commit the transaction and the ORA-12838 disappears. 11 | -- 12 | -- commit; 13 | -- 14 | 15 | -- Without commit: ORA-12838 16 | select * from tq84_ora_12838; 17 | 18 | drop table tq84_ora_12838 purge; 19 | -------------------------------------------------------------------------------- /SQL/insert/insert_all_01.sql: -------------------------------------------------------------------------------- 1 | create table tq84_insert_all ( 2 | a number, 3 | b varchar2(10) 4 | ); 5 | 6 | insert all 7 | into tq84_insert_all values (1, 'one' ) 8 | into tq84_insert_all values (2, 'two' ) 9 | into tq84_insert_all values (3, 'three') 10 | select 1 from dual; 11 | 12 | select * from tq84_insert_all; 13 | 14 | drop table tq84_insert_all purge; 15 | -------------------------------------------------------------------------------- /SQL/select/12c/row_limiting_clause/fetch_first_n_percent_rows_only.sql: -------------------------------------------------------------------------------- 1 | create table tq84_table ( 2 | id number, 3 | txt varchar2(10) 4 | ); 5 | 6 | begin 7 | 8 | for r in 1 .. 10000 loop 9 | 10 | insert into tq84_table values (r, dbms_random.string('a', 10)); 11 | 12 | end loop; 13 | 14 | end; 15 | / 16 | 17 | -- select 10 (= 0.1 percent of 10000) records: 18 | select * from tq84_table 19 | order by txt 20 | fetch first 0.1 percent rows only; 21 | 22 | 23 | drop table tq84_table purge; 24 | -------------------------------------------------------------------------------- /SQL/select/12c/with_function.sql: -------------------------------------------------------------------------------- 1 | create table tq84_with_function ( 2 | id number, 3 | txt varchar2(10) 4 | ); 5 | 6 | insert into tq84_with_function values (1, 'one'); 7 | insert into tq84_with_function values (2, 'two'); 8 | 9 | with function dup (txt in varchar2) return varchar2 as 10 | begin 11 | return txt || '-' || txt; 12 | end dup; 13 | select 14 | id, 15 | substr(dup(txt), 1, 40) dup 16 | from 17 | tq84_with_function 18 | / 19 | 20 | drop table tq84_with_function; 21 | 22 | -------------------------------------------------------------------------------- /SQL/select/aggregate/approx_count_distinct.sql: -------------------------------------------------------------------------------- 1 | select 2 | approx_count_distinct(object_name) approx_cnt, 3 | count(distinct(object_name)) exact_cnt 4 | from 5 | dba_objects; 6 | -------------------------------------------------------------------------------- /SQL/select/aggregate/listagg/clob/v1/func.sql: -------------------------------------------------------------------------------- 1 | create or replace function tq84_listagg_f( 2 | value varchar2, 3 | separator varchar2 4 | ) return clob 5 | parallel_enable 6 | aggregate using tq84_listagg_t; 7 | -------------------------------------------------------------------------------- /SQL/select/aggregate/listagg/clob/v1/test.sql: -------------------------------------------------------------------------------- 1 | select 2 | tq84_listagg_f(object_name, ' - ') 3 | from 4 | user_objects 5 | ; 6 | -------------------------------------------------------------------------------- /SQL/select/aggregate/listagg/clob/v2/func.sql: -------------------------------------------------------------------------------- 1 | create or replace function tq84_listagg_f( 2 | rec tq84_listagg_rec, 3 | separator varchar2 4 | ) 5 | return clob authid definer 6 | -- parallel_enable 7 | aggregate using tq84_listagg_t; 8 | / 9 | -------------------------------------------------------------------------------- /SQL/select/aggregate/listagg/clob/v2/test.sql: -------------------------------------------------------------------------------- 1 | select 2 | tq84_listagg_f(tq84_listagg_rec(object_name, object_id), ' - ') 3 | from 4 | user_objects 5 | ; 6 | 7 | select 8 | tq84_listagg_f(tq84_listagg_rec(column_name, -column_id), ',') 9 | from 10 | user_tab_columns 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/aggregate/nested/run_.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_nested_aggr_func_test; 2 | 3 | @create-table.sql 4 | @select.sql 5 | @select-nested.sql 6 | -------------------------------------------------------------------------------- /SQL/select/aggregate/nested/select-nested.sql: -------------------------------------------------------------------------------- 1 | select 2 | sum(avg(val_2)) val_2_sum_of_avg, 3 | avg(sum(val_2)) val_2_avg_of_sum 4 | from 5 | tq84_nested_aggr_func_test 6 | group by 7 | val_1 8 | ; 9 | -- 10 | -- VAL_2_SUM_OF_AVG VAL_2_AVG_OF_SUM 11 | -- ---------------- ---------------- 12 | -- 19 10 13 | -------------------------------------------------------------------------------- /SQL/select/aggregate/nested/select.sql: -------------------------------------------------------------------------------- 1 | select 2 | val_1 val_1 , 3 | avg(val_2) val_2_avg, 4 | sum(val_2) val_2_sum 5 | from 6 | tq84_nested_aggr_func_test 7 | group by 8 | val_1; 9 | -- 10 | -- VAL_1 VAL_2_AVG VAL_2_SUM 11 | -- ----- ---------- ---------- 12 | -- GHI 10 10 13 | -- DEF 7 14 14 | -- ABC 2 6 15 | -------------------------------------------------------------------------------- /SQL/select/analytical_functions/keep_dense_rank/column_values_of_row_with_max_value.sql: -------------------------------------------------------------------------------- 1 | create table tq84_a ( 2 | a varchar2(10), 3 | b number 4 | ); 5 | 6 | insert into tq84_a values ('a', 1); 7 | insert into tq84_a values ('b', 2); 8 | insert into tq84_a values ('a', 4); 9 | insert into tq84_a values ('b', 3); 10 | 11 | select 12 | max(a) keep (dense_rank first order by b desc) a, 13 | max(b) keep (dense_rank first order by b desc) b 14 | from 15 | tq84_a 16 | ; 17 | 18 | drop table tq84_a purge; 19 | -------------------------------------------------------------------------------- /SQL/select/distinct/distinct_01.sql: -------------------------------------------------------------------------------- 1 | create table tq84_distinct ( 2 | a number 3 | ); 4 | 5 | insert into tq84_distinct values (1); 6 | insert into tq84_distinct values (1); 7 | 8 | insert into tq84_distinct values (2); 9 | 10 | insert into tq84_distinct values (3); 11 | 12 | insert into tq84_distinct values (4); 13 | insert into tq84_distinct values (4); 14 | 15 | select distinct a from tq84_distinct; 16 | 17 | drop table tq84_distinct purge; 18 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/ancestor-descendant/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table parent_child purge; 2 | drop procedure is_ancestor_descendant; 3 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/ancestor-descendant/create-table.sql: -------------------------------------------------------------------------------- 1 | create table parent_child( 2 | parent_ varchar2(20), 3 | child_ varchar2(20) 4 | ); 5 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/ancestor-descendant/try.sql: -------------------------------------------------------------------------------- 1 | exec is_ancestor_descendant('ab', 'abet'); 2 | exec is_ancestor_descendant('b' , 'bi' ); 3 | exec is_ancestor_descendant('a' , 'biq' ); 4 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table directed_graph purge; 2 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/create-table.sql: -------------------------------------------------------------------------------- 1 | create table directed_graph ( 2 | node_from char(1), 3 | node_to char(1) 4 | ); 5 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/directed-graph.txt: -------------------------------------------------------------------------------- 1 | A-->C<--D-->F-->L 2 | | | ^ | ^ 3 | v v | v | 4 | B H-->I J-->K 5 | | | | 6 | v v v 7 | E G M 8 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/nodes-reachable-from-A-nocycle.sql: -------------------------------------------------------------------------------- 1 | select 2 | lpad(' ', level-1) || node_from || '->' || node_to 3 | from 4 | directed_graph 5 | start with 6 | node_from = 'A' 7 | connect by nocycle 8 | prior node_to = node_from; 9 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/nodes-reachable-from-A.sql: -------------------------------------------------------------------------------- 1 | select 2 | lpad(' ', level-1) || node_from || '->' || node_to 3 | from 4 | directed_graph 5 | start with 6 | node_from = 'A' 7 | connect by 8 | prior node_to = node_from; 9 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/nocycle/nodes-reachable-from-F.sql: -------------------------------------------------------------------------------- 1 | select 2 | lpad(' ', level-1) || node_from || '->' || node_to 3 | from 4 | directed_graph 5 | start with 6 | node_from = 'F' 7 | connect by 8 | prior node_to = node_from; 9 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/pruning-branches/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table prune_test purge; 2 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/pruning-branches/create-table.sql: -------------------------------------------------------------------------------- 1 | create table prune_test ( 2 | parent number, 3 | child number 4 | ); 5 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/pruning-branches/select-data.sql: -------------------------------------------------------------------------------- 1 | select 2 | lpad(' ', 2*level) || child 3 | from 4 | prune_test 5 | start with 6 | parent is null 7 | connect by 8 | prior child = parent and 9 | parent not in (1, 71) -- Exclude children below and 71 10 | ; 11 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/recursive-additions/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table recursive_additions purge; 2 | 3 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/recursive-additions/create-table.sql: -------------------------------------------------------------------------------- 1 | set feedback off 2 | 3 | create table recursive_additions ( 4 | parent number, 5 | child number 6 | --constraint uq_tcb unique (child) 7 | ); 8 | 9 | comment on table recursive_additions is 'The sum of all children with the same parent is equal to this parent'; 10 | -------------------------------------------------------------------------------- /SQL/select/hierarchical_queries/start-with_connect-by/recursive-additions/select-hierarchically.sql: -------------------------------------------------------------------------------- 1 | select 2 | lpad(' ',2*(level-1)) || to_char(child) s 3 | from 4 | recursive_additions 5 | start with 6 | parent is null 7 | connect by 8 | prior child = parent; 9 | -------------------------------------------------------------------------------- /SQL/select/join/apply/cross/ex-1/cleanup.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_right purge; 2 | drop table tq84_left purge; 3 | -------------------------------------------------------------------------------- /SQL/select/join/apply/cross/ex-1/data.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_left values (1, 'foo'); 2 | insert into tq84_left values (2, 'bar'); 3 | insert into tq84_left values (3, 'baz'); 4 | 5 | insert into tq84_right values (1, 1.01); 6 | insert into tq84_right values (1, 10.10); 7 | insert into tq84_right values (1, 100.00); 8 | 9 | insert into tq84_right values (2, 222.22); 10 | 11 | insert into tq84_right values (3, 300.12); 12 | insert into tq84_right values (3, 33.21); 13 | 14 | commit; 15 | -------------------------------------------------------------------------------- /SQL/select/join/apply/cross/ex-1/select.sql: -------------------------------------------------------------------------------- 1 | select 2 | l.text, 3 | a.total 4 | from 5 | tq84_left l cross apply 6 | (select 7 | sum(r.val) total 8 | from 9 | tq84_right r 10 | where 11 | r.id_left = l.id 12 | ) a; 13 | -- 14 | -- foo 111.11 15 | -- bar 222.22 16 | -- baz 333.33 17 | -------------------------------------------------------------------------------- /SQL/select/join/apply/cross/ex-1/tables.sql: -------------------------------------------------------------------------------- 1 | create table tq84_left ( 2 | id integer primary key, 3 | text varchar2(3) not null 4 | ); 5 | 6 | create table tq84_right ( 7 | id_left integer not null references tq84_left, 8 | val number(5,2) 9 | ); 10 | -------------------------------------------------------------------------------- /SQL/select/join/outer_join/pesky_outer_join/README.md: -------------------------------------------------------------------------------- 1 | See [my blog](http://renenyffenegger.blogspot.ch/2014/09/oh-that-pesky-oracle-outer-join-symbol.html). 2 | -------------------------------------------------------------------------------- /SQL/select/join/outer_join/pesky_outer_join/inkscape.svgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/SQL/select/join/outer_join/pesky_outer_join/inkscape.svgz -------------------------------------------------------------------------------- /SQL/select/match_recognize/find-consecutive-rows/one-row-per-match.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_consecutive_rows 2 | match_recognize ( 3 | order by id 4 | measures 5 | min(id) start_id, 6 | max(id) end_id 7 | pattern (R C*) 8 | define C as id = prev(id) + 1 9 | ); 10 | -- 11 | -- START_ID END_ID 12 | -- ---------- ---------- 13 | -- 1 3 14 | -- 5 5 15 | -- 8 11 16 | -- 20 20 17 | -------------------------------------------------------------------------------- /SQL/select/misc/csv_to_columns/col-format.sql: -------------------------------------------------------------------------------- 1 | column col_1 format a10 2 | column col_2 format a10 3 | column col_3 format a10 4 | column col_4 format a10 5 | -------------------------------------------------------------------------------- /SQL/select/misc/csv_to_columns/create-table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_csv_data ( 2 | csv_line varchar2(100) 3 | ); 4 | -------------------------------------------------------------------------------- /SQL/select/misc/csv_to_columns/drop-table.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_csv_data purge; 2 | -------------------------------------------------------------------------------- /SQL/select/misc/csv_to_columns/insert-values.sql: -------------------------------------------------------------------------------- 1 | insert into tq84_csv_data values ( 'one,two,three,four'); 2 | insert into tq84_csv_data values ( 'foo,bar,baz,qux' ); 3 | insert into tq84_csv_data values ( '1,,3,' ); 4 | insert into tq84_csv_data values ( 'i,ii,iii,iv' ); 5 | insert into tq84_csv_data values ( ' ,**,***,****' ); 6 | insert into tq84_csv_data values ( ',,,' ); 7 | -------------------------------------------------------------------------------- /SQL/select/misc/csv_to_columns/run-in-sqlplus.sql: -------------------------------------------------------------------------------- 1 | @create-table 2 | @insert-values 3 | @col-format 4 | @select 5 | @drop-table 6 | -------------------------------------------------------------------------------- /SQL/select/misc/sample/select-approx-5-percent.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sample_src ( 2 | id number 3 | ); 4 | 5 | insert into tq84_sample_src 6 | select level from dual 7 | connect by level <= 1000; 8 | 9 | select count(*) from tq84_sample_src; 10 | -- 1000 11 | 12 | create table tq84_sample_dest as 13 | select * from tq84_sample_src sample (5); 14 | 15 | select count(*) from tq84_sample_dest; 16 | -- 52 17 | 18 | select * from tq84_sample_dest; 19 | 20 | drop table tq84_sample_src purge; 21 | drop table tq84_sample_dest purge; 22 | -------------------------------------------------------------------------------- /SQL/select/model/intro/_run.sql: -------------------------------------------------------------------------------- 1 | set feedback off 2 | @ test-data 3 | @ minimal 4 | @ update-col-3 5 | @ condition 6 | @ add-record 7 | @ use-dimension-value 8 | @ update-with-previous 9 | 10 | @ err-32611 11 | @ err-32613 12 | @ err-32622 13 | @ err-00984 14 | -------------------------------------------------------------------------------- /SQL/select/model/intro/add-record.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_1[ 7 ] = 101, 10 | col_2[ 7 ] = 102, 11 | col_3[ 7 ] = 103 12 | ) 13 | ; 14 | -------------------------------------------------------------------------------- /SQL/select/model/intro/condition.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_3[row_ > 3] = 42 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/err-00984.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_1[row_] = col_1 * 2 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/err-32611.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_3[cv() > 3] = 42 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/err-32613.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures (col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_1 = col_1 * 2 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/err-32622.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_1[row_] = col_2[row_] * col_3[row_] 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/minimal.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | /* rules go here */ 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/update-col-3.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_3[any] = 42 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/update-with-previous.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_3[any] = nvl(col_2[cv()-1], -9999) 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/model/intro/use-dimension-value.sql: -------------------------------------------------------------------------------- 1 | select 2 | * 3 | from 4 | tq84_model_clause 5 | model 6 | dimension by ( row_ ) 7 | measures ( col_1, col_2, col_3, col_4, col_5 ) 8 | ( 9 | col_3[any] = cv(row_) * 111 10 | ) 11 | ; 12 | -------------------------------------------------------------------------------- /SQL/select/partition_extension_clause/README.md: -------------------------------------------------------------------------------- 1 | 2 | ## Links 3 | [Table partitions](https://github.com/ReneNyffenegger/oracle-patterns/tree/master/DatabaseObjects/Tables/Partitions) 4 | -------------------------------------------------------------------------------- /SQL/select/pivot/un/visualized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/SQL/select/pivot/un/visualized.png -------------------------------------------------------------------------------- /SQL/select/skip_locked/call_process_next_item.sql: -------------------------------------------------------------------------------- 1 | set feedback off 2 | 3 | set timing on 4 | begin 5 | tq84_process_next_item; 6 | end; 7 | / 8 | 9 | exit 10 | -------------------------------------------------------------------------------- /SQL/select/skip_locked/create_tab.sql: -------------------------------------------------------------------------------- 1 | create table tq84_queue ( 2 | item number(7) primary key, 3 | status varchar2(4) not null check (status in ('TODO', 'DONE')) 4 | ); 5 | -------------------------------------------------------------------------------- /SQL/select/skip_locked/insert_initial.sql: -------------------------------------------------------------------------------- 1 | set feedback off 2 | 3 | insert into tq84_queue values (4, 'TODO'); 4 | insert into tq84_queue values (5, 'TODO'); 5 | insert into tq84_queue values (6, 'TODO'); 6 | insert into tq84_queue values (1, 'TODO'); 7 | insert into tq84_queue values (2, 'TODO'); 8 | insert into tq84_queue values (3, 'TODO'); 9 | 10 | commit; 11 | -------------------------------------------------------------------------------- /SQL/select/skip_locked/install.sql: -------------------------------------------------------------------------------- 1 | drop procedure tq84_process_next_item; 2 | drop table tq84_queue; 3 | 4 | @create_tab.sql 5 | @insert_initial.sql 6 | @process_next_item.plsql 7 | 8 | prompt execute process_items.bat now. 9 | -------------------------------------------------------------------------------- /SQL/select/top_n/12c-30-pct.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | order by 5 | num 6 | fetch first 30 percent rows only; 7 | -------------------------------------------------------------------------------- /SQL/select/top_n/12c-first-3-rows-with-ties.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | order by 5 | num 6 | fetch first 3 rows with ties; 7 | -------------------------------------------------------------------------------- /SQL/select/top_n/12c-first-3-rows.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | order by 5 | num 6 | fetch first 3 rows only; 7 | -------------------------------------------------------------------------------- /SQL/select/top_n/12c-first-row.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | order by 5 | num 6 | fetch first row only; 7 | -------------------------------------------------------------------------------- /SQL/select/top_n/12c-offset-4-next-2.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | order by 5 | num 6 | offset 4 rows 7 | fetch next 2 rows only; 8 | -------------------------------------------------------------------------------- /SQL/select/top_n/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table top_n_test purge; 2 | -------------------------------------------------------------------------------- /SQL/select/top_n/row_number-paging.sql: -------------------------------------------------------------------------------- 1 | select 2 | num, 3 | txt, 4 | lng 5 | from ( 6 | select 7 | t.*, 8 | row_number() over (order by num) r 9 | from 10 | top_n_test t 11 | ) 12 | where 13 | r between 4 and 6; 14 | -------------------------------------------------------------------------------- /SQL/select/top_n/rownum-inner-query.sql: -------------------------------------------------------------------------------- 1 | select * from ( 2 | select * 3 | from 4 | top_n_test 5 | order by 6 | num 7 | ) 8 | where 9 | rownum < 4; 10 | -------------------------------------------------------------------------------- /SQL/select/top_n/rownum-paging.sql: -------------------------------------------------------------------------------- 1 | select * from ( 2 | select * 3 | from 4 | top_n_test 5 | order by 6 | num 7 | ) 8 | where 9 | rownum between 4 and 6; 10 | -------------------------------------------------------------------------------- /SQL/select/top_n/rownum-wrong.sql: -------------------------------------------------------------------------------- 1 | select * 2 | from 3 | top_n_test 4 | where 5 | rownum < 4 6 | order by 7 | num; 8 | -------------------------------------------------------------------------------- /SQL/statement/nouns/session/alter/set/current_schema/execute-immediate/_run.sql: -------------------------------------------------------------------------------- 1 | connect rene/rene 2 | @create-users.sql 3 | 4 | connect pkg_owner/pw 5 | @pkg-owner 6 | 7 | connect pkg_user/pw 8 | @pkg-user 9 | 10 | connect rene/rene 11 | @clean-up.sql 12 | -------------------------------------------------------------------------------- /SQL/statement/nouns/session/alter/set/current_schema/execute-immediate/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop user pkg_user cascade; 2 | drop user pkg_owner cascade; 3 | -------------------------------------------------------------------------------- /SQL/statement/nouns/session/alter/set/current_schema/execute-immediate/create-users.sql: -------------------------------------------------------------------------------- 1 | create user pkg_owner identified by pw default tablespace data quota unlimited on data; 2 | create user pkg_user identified by pw default tablespace data quota unlimited on data; 3 | 4 | grant create session, create procedure to pkg_owner; 5 | grant create session to pkg_user; 6 | -------------------------------------------------------------------------------- /SQL/statement/nouns/session/alter/set/current_schema/execute-immediate/pkg-user.sql: -------------------------------------------------------------------------------- 1 | begin 2 | pkg_owner.pkg_definer .do_something; 3 | pkg_owner.pkg_current_user.do_something; 4 | end; 5 | / 6 | -------------------------------------------------------------------------------- /SQLLoader/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.bad 3 | *.dsc 4 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/Binary-code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/SQLLoader/binary-data/Binary-code.jpg -------------------------------------------------------------------------------- /SQLLoader/binary-data/Eschenbergturm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/SQLLoader/binary-data/Eschenbergturm.jpg -------------------------------------------------------------------------------- /SQLLoader/binary-data/Oracle-Buildings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/SQLLoader/binary-data/Oracle-Buildings.jpg -------------------------------------------------------------------------------- /SQLLoader/binary-data/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_blob ( 2 | filename varchar2(20), 3 | author varchar2(16), 4 | url varchar2(80), 5 | image blob 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/create_table_long_raw.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_long_raw ( 2 | filename varchar2(20), 3 | author varchar2(16), 4 | url varchar2(80), 5 | image long raw 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/file-index.dat: -------------------------------------------------------------------------------- 1 | Binary-code.jpg|Christiaan Colen|https://ccsearch.creativecommons.org/photos/f63dd034-4de4-49c8-a500-270aedec50c5 2 | Eschenbergturm.jpg|Nouhailler|https://ccsearch.creativecommons.org/photos/bb7d21fe-40de-46cb-a6e1-02df76cfa15a 3 | Oracle-Buildings.jpg|Otto Gelderman|https://ccsearch.creativecommons.org/photos/53cbf2b7-0bc2-427a-abc3-cbf0413d9abb 4 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/load.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'file-index.dat' 3 | into table tq84_sql_loader_blob 4 | fields terminated by '|' 5 | ( 6 | filename char(20), 7 | author char(16), 8 | url char(80), 9 | image lobfile(filename) terminated by eof 10 | ) 11 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/load_long_raw_Binary-code.ctl: -------------------------------------------------------------------------------- 1 | options(bindsize=197032, rows=1) 2 | load data 3 | infile 'Binary-code.jpg' "fix 49258" 4 | concatenate 4 -- 4 * 49258 = 197032 5 | preserve blanks 6 | into table tq84_sql_loader_long_raw 7 | append 8 | ( 9 | filename constant 'Binary-code.jpg' , 10 | author constant 'Christiaan Colen', 11 | url constant 'https://ccsearch.creativecommons.org/photos/f63dd034-4de4-49c8-a500-270aedec50c5', 12 | image raw(197032) 13 | ) 14 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/load_long_raw_Eschenbergturm.ctl: -------------------------------------------------------------------------------- 1 | options(bindsize=197032, rows=1) 2 | load data 3 | infile 'Eschenbergturm.jpg' "fix 35879" 4 | concatenate 5 -- 5 * 35789 = 179395 5 | preserve blanks 6 | into table tq84_sql_loader_long_raw 7 | append 8 | ( 9 | filename constant 'Eschenbergturm.jpg' , 10 | author constant 'Nouhailler', 11 | url constant 'https://ccsearch.creativecommons.org/photos/bb7d21fe-40de-46cb-a6e1-02df76cfa15a', 12 | image raw(179395) 13 | ) 14 | -------------------------------------------------------------------------------- /SQLLoader/binary-data/load_long_raw_Oracle-Buildings.ctl: -------------------------------------------------------------------------------- 1 | options(bindsize=267083, rows=1) 2 | load data 3 | infile 'Oracle-Buildings.jpg' "fix 14057" 4 | concatenate 19 -- 19 * 14057 = 267083 5 | preserve blanks 6 | into table tq84_sql_loader_long_raw 7 | append 8 | ( 9 | filename constant 'Oracle-Buildings.jpg' , 10 | author constant 'Otto Geldermann', 11 | url constant 'https://ccsearch.creativecommons.org/photos/53cbf2b7-0bc2-427a-abc3-cbf0413d9abb', 12 | image raw(267083) 13 | ) 14 | -------------------------------------------------------------------------------- /SQLLoader/ex-case-when/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_case_when ( 2 | type_ varchar2(3), 3 | num integer 4 | ); 5 | -------------------------------------------------------------------------------- /SQLLoader/ex-case-when/load.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load.dat' -- "str '\r\n'" 3 | truncate into table tq84_sql_loader_case_when 4 | fields terminated by ';' ( 5 | type_ "case :type_ 6 | when '1' then 'foo' 7 | when '2' then 'bar' 8 | when '3' then 'baz' 9 | else '???' 10 | end", 11 | num char 12 | ) 13 | -------------------------------------------------------------------------------- /SQLLoader/ex-case-when/load.dat: -------------------------------------------------------------------------------- 1 | 2;42 2 | 1;9 3 | 3;18 4 | 6;123 5 | 3;5 6 | -------------------------------------------------------------------------------- /SQLLoader/ex-express-optionally_enclosed_by/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_express ( 2 | col_1 varchar( 3), 3 | col_2 varchar(10), 4 | num integer 5 | ); 6 | -------------------------------------------------------------------------------- /SQLLoader/ex-express-optionally_enclosed_by/import_data.bat: -------------------------------------------------------------------------------- 1 | sqlldr rene/rene@ora18 ^ 2 | data = some.dat ^ 3 | table = tq84_sql_loader_express ^ 4 | external_table = not_used ^ 5 | field_names = first_ignore ^ 6 | characterset = utf8 ^ 7 | errors = 0 ^ 8 | silent = header,feedback ^ 9 | optionally_enclosed_by ='\"' 10 | -------------------------------------------------------------------------------- /SQLLoader/ex-express-optionally_enclosed_by/some.dat: -------------------------------------------------------------------------------- 1 | col_1;col_2;col_3 2 | foo,abc,2 3 | bar,"def,hij",4 4 | baz,lmn,6 5 | -------------------------------------------------------------------------------- /SQLLoader/ex_02/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_2.ctl userid=rene 4 | 5 | select * from tq84_sql_loader_2; 6 | 7 | drop table tq84_sql_loader_2; 8 | 9 | prompt 10 | prompt Check load_2.bad file 11 | prompt 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_02/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_2 ( 2 | field_1 varchar2(10), 3 | field_2 number 4 | ); 5 | -------------------------------------------------------------------------------- /SQLLoader/ex_02/load_2.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load_2.dat' "str '\r\n'" 3 | insert 4 | into table tq84_sql_loader_2 5 | fields terminated by ',' 6 | ( 7 | field_1 char, 8 | field_2 integer external 9 | ) 10 | -------------------------------------------------------------------------------- /SQLLoader/ex_02/load_2.dat: -------------------------------------------------------------------------------- 1 | one,1 2 | two,2 3 | fifty,50 4 | eighty-eight,88 5 | one hundred,100 6 | fifteen,15 7 | -------------------------------------------------------------------------------- /SQLLoader/ex_02/readme.txt: -------------------------------------------------------------------------------- 1 | http://www.adp-gmbh.ch/ora/tools/sql_loader/example_2.html 2 | -------------------------------------------------------------------------------- /SQLLoader/ex_03/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_3.ctl userid=rene 4 | 5 | select * from tq84_sql_loader_3; 6 | 7 | drop table tq84_sql_loader_3 purge; 8 | 9 | prompt 10 | prompt Check the load_3.dsc file 11 | prompt 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_03/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_3 ( 2 | field_1 varchar2(10), 3 | field_2 varchar2(10) 4 | ); 5 | -------------------------------------------------------------------------------- /SQLLoader/ex_03/load_3.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load_3.dat' "str '\r\n'" 3 | discardfile 'load_3.dsc' 4 | insert 5 | into table tq84_sql_loader_3 6 | when field_2 = 'Fruit' 7 | fields terminated by ';' 8 | ( 9 | field_1 char, 10 | field_2 char 11 | ) 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_03/load_3.dat: -------------------------------------------------------------------------------- 1 | Banana;Fruit; 2 | Lemon;Fruit; 3 | Avocado;Fruit 4 | Ford;Car; 5 | Pear;Fruit; 6 | Apple;Fruit; 7 | -------------------------------------------------------------------------------- /SQLLoader/ex_03/readme.txt: -------------------------------------------------------------------------------- 1 | http://www.adp-gmbh.ch/ora/tools/sql_loader/example_3.html 2 | -------------------------------------------------------------------------------- /SQLLoader/ex_04/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_4.ctl userid=rene 4 | 5 | prompt 6 | 7 | select * from tq84_sql_loader_4_a; 8 | 9 | prompt 10 | 11 | select * from tq84_sql_loader_4_b; 12 | 13 | drop table tq84_sql_loader_4_a purge; 14 | drop table tq84_sql_loader_4_b purge; 15 | -------------------------------------------------------------------------------- /SQLLoader/ex_04/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_4_a ( 2 | field_1 varchar2(10), 3 | field_2 varchar2(10) 4 | ); 5 | 6 | create table tq84_sql_loader_4_b ( 7 | field_1 varchar2(10), 8 | field_2 varchar2(10) 9 | ); 10 | -------------------------------------------------------------------------------- /SQLLoader/ex_04/load_4.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load_4.dat' "str '\r\n'" 3 | discardfile 'load_4.dsc' 4 | insert 5 | into table tq84_sql_loader_4_a 6 | when field_2 = 'Fruit' 7 | ( 8 | field_1 position(1) char(8), 9 | field_2 position(9) char(5) 10 | ) 11 | into table tq84_sql_loader_4_b 12 | when field_2 = 'City' 13 | ( 14 | field_1 position(1) char(8), 15 | field_2 position(9) char(5) 16 | ) 17 | -------------------------------------------------------------------------------- /SQLLoader/ex_04/load_4.dat: -------------------------------------------------------------------------------- 1 | Banana Fruit 2 | Lemon Fruit 3 | Tokyo City 4 | Avocado Fruit 5 | Boston City 6 | Ford Car 7 | Pear Fruit 8 | Apple Fruit 9 | -------------------------------------------------------------------------------- /SQLLoader/ex_04/readme.txt: -------------------------------------------------------------------------------- 1 | http://www.adp-gmbh.ch/ora/tools/sql_loader/example_4.html 2 | -------------------------------------------------------------------------------- /SQLLoader/ex_05/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_5.ctl userid=rene 4 | 5 | select id, to_char(dt, 'dd.mm.yyyy') dt from tq84_sql_loader_5; 6 | 7 | prompt 8 | prompt Note, record with "20101010" is also loaded 9 | prompt 10 | 11 | drop table tq84_sql_loader_5 purge; 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_05/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_5 ( 2 | id number not null, 3 | dt date 4 | ); 5 | -------------------------------------------------------------------------------- /SQLLoader/ex_05/load_5.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | into table tq84_sql_loader_5 3 | fields terminated by "|" 4 | ( 5 | id, 6 | dt date "yyyy.mm.dd" 7 | ) 8 | -------------------------------------------------------------------------------- /SQLLoader/ex_05/load_5.dat: -------------------------------------------------------------------------------- 1 | 1|2012.12.12 2 | 2|2011.11.11 3 | 3|20101010 4 | -------------------------------------------------------------------------------- /SQLLoader/ex_06/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_6 ( 2 | id number not null, 3 | tx varchar2(4000) 4 | ); 5 | 6 | create table tq84_sql_loader_6_ok ( 7 | id number not null, 8 | tx varchar2(4000) 9 | ); 10 | -------------------------------------------------------------------------------- /SQLLoader/ex_06/load_6.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | into table tq84_sql_loader_6 3 | fields terminated by "|" 4 | ( 5 | id, 6 | tx 7 | ) 8 | -------------------------------------------------------------------------------- /SQLLoader/ex_06/load_6.dat: -------------------------------------------------------------------------------- 1 | 1|This line should be fine 2 | 2|This line contains more than 255 characters and will cause an "Field in data file exceeds maximum length" error message. Of course, I need some more text here in order to reach this 255 character limit. For example, by adding some city names: New York, Los Angeles, Berlin, Berne, Lucerne, Winterthur, Basle, Paris, Tokyo, Cape Town etc. 3 | 3|This line should be fine, too 4 | -------------------------------------------------------------------------------- /SQLLoader/ex_06/load_6_ok.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | into table tq84_sql_loader_6_ok 3 | fields terminated by "|" 4 | ( 5 | id, 6 | tx char(4000) 7 | ) 8 | -------------------------------------------------------------------------------- /SQLLoader/ex_07/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_7.ctl userid=rene 4 | 5 | select * from tq84_sql_loader_7; 6 | 7 | drop table tq84_sql_loader_7; 8 | 9 | prompt 10 | prompt Check load_7.bad file 11 | prompt 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_07/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_7 ( 2 | field_1 varchar2(10), 3 | field_2 varchar2(10), 4 | field_3 varchar2(10), 5 | field_4 varchar2(10) 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/ex_07/load_7.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load_7.dat' "str '\r\n'" 3 | insert 4 | into table tq84_sql_loader_7 5 | fields terminated by ',' 6 | ( 7 | field_3 char, 8 | field_2 char, 9 | field_4 char, 10 | field_1 char 11 | ) 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_07/load_7.dat: -------------------------------------------------------------------------------- 1 | one,two,three,four 2 | 1,2,3,4 3 | -------------------------------------------------------------------------------- /SQLLoader/ex_08/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_8.ctl userid=rene 4 | 5 | select * from tq84_sql_loader_8; 6 | 7 | drop table tq84_sql_loader_8; 8 | 9 | prompt 10 | prompt Check load_8.bad file 11 | prompt 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_08/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_8 ( 2 | id number primary key, 3 | txt varchar2(20), 4 | num number, 5 | dt date 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/ex_08/load_8.csv: -------------------------------------------------------------------------------- 1 | id,txt,num,dt 2 | 1,"foo,bar,baz",44.22,21.02.2014 3 | 2,"one,two,three",31.28,06.06.2014 4 | 3,bla bla,-19.2,28.08.2014 5 | -------------------------------------------------------------------------------- /SQLLoader/ex_08/load_8.ctl: -------------------------------------------------------------------------------- 1 | options(skip=1) 2 | load data 3 | infile 'load_8.csv' 4 | insert 5 | into table tq84_sql_loader_8 6 | fields 7 | terminated by ',' 8 | optionally enclosed by '"' 9 | ( 10 | id, 11 | txt, 12 | num "to_number(:num, '99999999999D9999', 'nls_numeric_characters=''.,''')", 13 | dt "to_date(:dt, 'dd.mm.yyyy')" 14 | ) 15 | -------------------------------------------------------------------------------- /SQLLoader/ex_09/README.md: -------------------------------------------------------------------------------- 1 | An example that loads dates. When these dates are empty, it inserts `sysdate` instead. 2 | 3 | See also [http://stackoverflow.com/questions/27830824/sqlloader-using-sysdate-if-incoming-value-is-blank](http://stackoverflow.com/questions/27830824/sqlloader-using-sysdate-if-incoming-value-is-blank). 4 | -------------------------------------------------------------------------------- /SQLLoader/ex_09/all.sql: -------------------------------------------------------------------------------- 1 | start create_table 2 | 3 | host sqlldr control=load_09.ctl userid=rene/rene 4 | 5 | select * from tq84_sql_loader_09; 6 | 7 | drop table tq84_sql_loader_09 purge; 8 | -------------------------------------------------------------------------------- /SQLLoader/ex_09/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_09 ( 2 | txt varchar2(10) not null, 3 | dt date not null, 4 | num number not null 5 | ); 6 | -------------------------------------------------------------------------------- /SQLLoader/ex_09/load_09.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'load_09.dat' "str '\r\n'" 3 | insert 4 | into table tq84_sql_loader_09 5 | ( 6 | txt position( 1:10), 7 | dt position(11:20) "nvl(to_date(trim(:dt), 'dd.mm.yyyy'), sysdate)", 8 | num position(21:24) 9 | ) 10 | -------------------------------------------------------------------------------- /SQLLoader/ex_09/load_09.dat: -------------------------------------------------------------------------------- 1 | abcdefghij18.07.2015 42 2 | !!!!!!!!!! 9876 3 | -------------------------------------------------------------------------------- /SQLLoader/ex_10/all.sql: -------------------------------------------------------------------------------- 1 | start create_table.sql 2 | start create_func.plsql 3 | 4 | host sqlldr control=load.ctl userid=rene/rene 5 | 6 | select * from tq84_sql_loader_10; 7 | 8 | prompt 9 | prompt check load.bad file 10 | prompt 11 | -------------------------------------------------------------------------------- /SQLLoader/ex_10/create_func.plsql: -------------------------------------------------------------------------------- 1 | create function tq84_func(op varchar2, num1 in number, num2 in number) return number is 2 | begin 3 | 4 | if op = 'plus' then return num1 + num2; end if; 5 | if op = 'minus' then return num1 - num2; end if; 6 | if op = 'mult' then return num1 * num2; end if; 7 | if op = 'div' then return num1 / num2; end if; 8 | return 0; 9 | 10 | end tq84_func; 11 | / 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_10/create_table.sql: -------------------------------------------------------------------------------- 1 | @drop_if_exists tq84_sql_loader_10 2 | 3 | create table tq84_sql_loader_10 ( 4 | id varchar2(10), 5 | result number 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/ex_10/data.csv: -------------------------------------------------------------------------------- 1 | id,op,num1,num2 2 | abc,plus,22,20 3 | def,minus,12,4 4 | ghi,mult,10,10 5 | jkl,div,35,7 6 | -------------------------------------------------------------------------------- /SQLLoader/ex_10/load.ctl: -------------------------------------------------------------------------------- 1 | options(skip=1) 2 | load data 3 | infile 'data.csv' 4 | insert 5 | into table tq84_sql_loader_10 6 | fields 7 | terminated by ',' 8 | optionally enclosed by '"' 9 | ( 10 | id, 11 | op boundfiller, 12 | num1 boundfiller, 13 | num2 boundfiller, 14 | result "tq84_func(:op, :num1, :num2)" 15 | ) 16 | -------------------------------------------------------------------------------- /SQLLoader/ex_11/all.sql: -------------------------------------------------------------------------------- 1 | @create_table.sql 2 | 3 | host sqlldr userid=rene/rene control=without_trailing_nullcols.ctl 4 | 5 | prompt Only one record loaded: 6 | select * from tq84_trailing_nullcols; 7 | 8 | host sqlldr userid=rene/rene control=with_trailing_nullcols.ctl 9 | prompt All (two) records loaded: 10 | select * from tq84_trailing_nullcols; 11 | 12 | drop table tq84_trailing_nullcols purge; 13 | -------------------------------------------------------------------------------- /SQLLoader/ex_11/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_trailing_nullcols ( 2 | col_1 varchar2(10), 3 | col_2 varchar2(10), 4 | col_3 varchar2(10) 5 | ); 6 | -------------------------------------------------------------------------------- /SQLLoader/ex_11/some.dat: -------------------------------------------------------------------------------- 1 | col_1|col_2|col_3 2 | one|two|three 3 | foo|| 4 | -------------------------------------------------------------------------------- /SQLLoader/ex_11/with_trailing_nullcols.ctl: -------------------------------------------------------------------------------- 1 | options (skip=1, silent=(all)) 2 | load data 3 | infile 'some.dat' 4 | into table tq84_trailing_nullcols 5 | truncate 6 | fields terminated by '|' 7 | trailing nullcols 8 | ( 9 | col_1, 10 | col_2, 11 | col_3 12 | ) 13 | -------------------------------------------------------------------------------- /SQLLoader/ex_11/without_trailing_nullcols.ctl: -------------------------------------------------------------------------------- 1 | options (skip=1,silent=(all)) 2 | load data 3 | infile 'some.dat' 4 | into table tq84_trailing_nullcols 5 | truncate 6 | fields terminated by '|' 7 | ( 8 | col_1, 9 | col_2, 10 | col_3 11 | ) 12 | -------------------------------------------------------------------------------- /SQLLoader/ex_12_skip-columns/all.sql: -------------------------------------------------------------------------------- 1 | @create_table.sql 2 | 3 | host sqlldr userid=rene/rene control=load.ctl 4 | 5 | select * from tq84_sql_loader_12; 6 | 7 | drop table tq84_trailing_nullcols purge; 8 | -------------------------------------------------------------------------------- /SQLLoader/ex_12_skip-columns/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_12 ( 2 | col_1 varchar2(10), 3 | col_3 varchar2(10), 4 | col_5 varchar2(10) 5 | ); 6 | -------------------------------------------------------------------------------- /SQLLoader/ex_12_skip-columns/data.csv: -------------------------------------------------------------------------------- 1 | col_1,col_2,col_3,col_4,col_5 2 | one,two,three,four,five 3 | eins,zwei,drei,vier,fünf 4 | -------------------------------------------------------------------------------- /SQLLoader/ex_12_skip-columns/load.ctl: -------------------------------------------------------------------------------- 1 | load data 2 | infile 'data.csv' 3 | insert 4 | into table tq84_sql_loader_12 5 | fields 6 | terminated by ',' 7 | ( 8 | col_1 , 9 | col_2 filler, 10 | col_3 , 11 | col_4 filler, 12 | col_5 13 | ) 14 | 15 | -------------------------------------------------------------------------------- /SQLLoader/ex_13_make-unique-indexes-unusable/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_tab_with_pk ( 2 | id number, 3 | txt varchar2(10), 4 | -- 5 | constraint tq84_tab_pk primary key (id) 6 | ); 7 | 8 | insert into tq84_tab_with_pk values (1, 'foo'); 9 | insert into tq84_tab_with_pk values (2, 'bar'); 10 | insert into tq84_tab_with_pk values (3, 'baz'); 11 | 12 | commit; 13 | -------------------------------------------------------------------------------- /SQLLoader/ex_13_make-unique-indexes-unusable/tab_with_pk.ctl: -------------------------------------------------------------------------------- 1 | options ( 2 | direct=true, 3 | errors=0, 4 | parallel=false 5 | ) 6 | unrecoverable 7 | load data infile "tab_with_pk.dat" 8 | into table tq84_tab_with_pk 9 | append 10 | fields terminated by "," 11 | ( 12 | id, 13 | txt 14 | ) 15 | -------------------------------------------------------------------------------- /SQLLoader/ex_13_make-unique-indexes-unusable/tab_with_pk.dat: -------------------------------------------------------------------------------- 1 | 7,seven 2 | 11,eleven 3 | 2,double 4 | 5,five 5 | -------------------------------------------------------------------------------- /SQLLoader/fixed-width/all.sql: -------------------------------------------------------------------------------- 1 | @ create_table 2 | 3 | host sqlldr control=load_1.ctl userid=rene/rene 4 | 5 | column num format 99990.99 6 | select 7 | load_time, 8 | num, 9 | txt_1 || '<' txt_1, 10 | txt_2 || '<' txt_2 11 | from 12 | tq84_sql_loader_1; 13 | 14 | drop table tq84_sql_loader_1; 15 | -------------------------------------------------------------------------------- /SQLLoader/fixed-width/create_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_sql_loader_1 ( 2 | load_time date, 3 | num number(7,2), 4 | txt_1 varchar2(7), 5 | txt_2 varchar2(10) 6 | ); 7 | -------------------------------------------------------------------------------- /SQLLoader/fixed-width/load_1.dat: -------------------------------------------------------------------------------- 1 | 12345.67 one two abcdefghij 2 | 42.42 three ABC EF HIJ 3 | -9 four xx 4 | n/a yyy yy 5 | 7.777 ! 6 | -------------------------------------------------------------------------------- /SQLPlus/attribute/attribute.sql: -------------------------------------------------------------------------------- 1 | column foo format 999.99 2 | 3 | attribute foo 4 | -- COLUMN foo ON 5 | -- FORMAT 999.99 6 | 7 | prompt 8 | attribute error 9 | -- COLUMN ERROR ON 10 | -- FORMAT A65 11 | -- word_wrap 12 | -------------------------------------------------------------------------------- /SQLPlus/echo/script.sql: -------------------------------------------------------------------------------- 1 | prompt selecting a message 2 | 3 | select 4 | 'hello world' message 5 | from 6 | dual; 7 | -------------------------------------------------------------------------------- /SQLPlus/new-value/multiple-records.sql: -------------------------------------------------------------------------------- 1 | set feedback off 2 | set verify off 3 | 4 | create table new_value_test ( 5 | col Varchar2(20) 6 | ); 7 | 8 | 9 | insert into new_value_test values ('val one' ); 10 | insert into new_value_test values ('val two' ); 11 | insert into new_value_test values ('val three'); 12 | 13 | column col new_value var 14 | 15 | select col from new_value_test; 16 | 17 | drop table new_value_test purge; 18 | 19 | prompt var is: &var 20 | /* 21 | var is: val three 22 | */ 23 | -------------------------------------------------------------------------------- /SQLPlus/set/exitcommit/exit_commit_off.sql: -------------------------------------------------------------------------------- 1 | set exitcommit off 2 | 3 | drop table tq84_exitcommit purge; 4 | 5 | create table tq84_exitcommit (a number); 6 | 7 | insert into tq84_exitcommit values (1); 8 | insert into tq84_exitcommit values (2); 9 | 10 | commit; 11 | 12 | insert into tq84_exitcommit values (3); 13 | insert into tq84_exitcommit values (4); 14 | 15 | exit 16 | -------------------------------------------------------------------------------- /SQLPlus/set/exitcommit/exit_commit_on.sql: -------------------------------------------------------------------------------- 1 | set exitcommit on 2 | 3 | drop table tq84_exitcommit purge; 4 | 5 | create table tq84_exitcommit (a number); 6 | 7 | insert into tq84_exitcommit values (1); 8 | insert into tq84_exitcommit values (2); 9 | 10 | commit; 11 | 12 | insert into tq84_exitcommit values (3); 13 | insert into tq84_exitcommit values (4); 14 | 15 | exit 16 | -------------------------------------------------------------------------------- /SQLPlus/set/exitcommit/run.bat: -------------------------------------------------------------------------------- 1 | sqlplus -S %connection% @exit_commit_off 2 | sqlplus -S %connection% @select 3 | 4 | sqlplus -S %connection% @exit_commit_on 5 | sqlplus -S %connection% @select 6 | -------------------------------------------------------------------------------- /SQLPlus/set/exitcommit/select.sql: -------------------------------------------------------------------------------- 1 | select * from tq84_exitcommit; 2 | exit 3 | -------------------------------------------------------------------------------- /SQLPlus/start/test_depth_limit.sql: -------------------------------------------------------------------------------- 1 | prompt Test depht limit 2 | start test_depth_limit.sql 3 | -------------------------------------------------------------------------------- /SQLPlus/store/.gitignore: -------------------------------------------------------------------------------- 1 | stored.sql 2 | -------------------------------------------------------------------------------- /SQLPlus/store/README.md: -------------------------------------------------------------------------------- 1 | 2 | `store` stores sqlplus settings into a file. 3 | 4 | `store` won't work if restriction level is set to at least 2 (`sqlplus -r 2 ...`) 5 | -------------------------------------------------------------------------------- /SQLPlus/store/store_into_stored.sql: -------------------------------------------------------------------------------- 1 | store set stored 2 | -------------------------------------------------------------------------------- /SQLPlus/whenever/sqlerror/exit.sql: -------------------------------------------------------------------------------- 1 | whenever sqlerror exit 2 | 3 | select q'[This statement is executed]' txt from dual; 4 | 5 | select 1 from "no such table"; 6 | 7 | select q'[This statement won't be executed]' txt from dual; 8 | -------------------------------------------------------------------------------- /UsersRoles/CloneUser/.gitignore: -------------------------------------------------------------------------------- 1 | create_cloned_user.sql 2 | -------------------------------------------------------------------------------- /errors/ORA/06512_at-line/show-offending-line/_run.sql: -------------------------------------------------------------------------------- 1 | @ spec 2 | @ body 3 | 4 | @ exec-01.sql 5 | @ sqlerrm 6 | @ error-backtrace.sql 7 | @ show-code-line.sql 8 | -------------------------------------------------------------------------------- /errors/ORA/06512_at-line/show-offending-line/error-backtrace.sql: -------------------------------------------------------------------------------- 1 | begin 2 | tq84_err_test.go; 3 | exception when others then 4 | dbms_output.put_line(dbms_utility.format_error_backtrace); 5 | end; 6 | / 7 | -- 8 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 5 9 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 10 10 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 15 11 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 20 12 | -- ORA-06512: at line 2 13 | -------------------------------------------------------------------------------- /errors/ORA/06512_at-line/show-offending-line/exec-01.sql: -------------------------------------------------------------------------------- 1 | begin 2 | tq84_err_test.go; 3 | end; 4 | / 5 | -- 6 | -- ERROR at line 1: 7 | -- ORA-20888: Raising errors is easier than raising money 8 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 5 9 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 10 10 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 15 11 | -- ORA-06512: at "RENE.TQ84_ERR_TEST", line 20 12 | -- ORA-06512: at line 2 13 | -------------------------------------------------------------------------------- /errors/ORA/06512_at-line/show-offending-line/spec.sql: -------------------------------------------------------------------------------- 1 | create or replace package tq84_err_test as 2 | 3 | procedure go; 4 | 5 | end tq84_err_test; 6 | / 7 | -------------------------------------------------------------------------------- /errors/ORA/06512_at-line/show-offending-line/sqlerrm.sql: -------------------------------------------------------------------------------- 1 | begin 2 | tq84_err_test.go; 3 | exception when others then 4 | dbms_output.put_line(sqlerrm); 5 | end; 6 | / 7 | -- 8 | -- ORA-20888: Raising errors is easier than raising money 9 | -------------------------------------------------------------------------------- /expimp/.gitignore: -------------------------------------------------------------------------------- 1 | *.dmp 2 | -------------------------------------------------------------------------------- /expimp/from_to_schema/all.sql: -------------------------------------------------------------------------------- 1 | connect / as sysdba 2 | 3 | @ create_schemas 4 | 5 | @ create_table 6 | 7 | host exp userid=rene/rene tables=(u1.tq84_table_for_export) 8 | 9 | host imp userid=rene/rene fromuser=u1 touser=u2 10 | 11 | drop user u1 cascade; 12 | 13 | @select 14 | 15 | drop user u2 cascade; 16 | -------------------------------------------------------------------------------- /expimp/from_to_schema/create_schemas.sql: -------------------------------------------------------------------------------- 1 | create user u1 identified by u1 2 | default tablespace data 3 | quota unlimited on data; 4 | 5 | grant 6 | create session, 7 | create table to u1; 8 | 9 | create user u2 identified by u2 10 | default tablespace data 11 | quota unlimited on data; 12 | 13 | grant 14 | create session, 15 | create table to u2; 16 | -------------------------------------------------------------------------------- /expimp/from_to_schema/create_table.sql: -------------------------------------------------------------------------------- 1 | connect u1/u1 2 | 3 | create table tq84_table_for_export ( 4 | col_1 number, 5 | col_2 number 6 | ); 7 | 8 | insert into tq84_table_for_export values (1,2); 9 | insert into tq84_table_for_export values (2,3); 10 | 11 | commit; 12 | -------------------------------------------------------------------------------- /expimp/from_to_schema/select.sql: -------------------------------------------------------------------------------- 1 | connect rene/rene 2 | 3 | select * from u2.tq84_table_for_export; 4 | -------------------------------------------------------------------------------- /expimp/schema/.gitignore: -------------------------------------------------------------------------------- 1 | exp.log 2 | imp.log 3 | just_a_user_clone.sql 4 | -------------------------------------------------------------------------------- /expimp/schema/connect_with_admin_right.sql: -------------------------------------------------------------------------------- 1 | connect meta/meta 2 | -------------------------------------------------------------------------------- /expimp/schema/drop_schema.sql: -------------------------------------------------------------------------------- 1 | @connect_with_admin_right 2 | drop user just_a_schema cascade; 3 | -------------------------------------------------------------------------------- /expimp/table_with_trigger/01.sql: -------------------------------------------------------------------------------- 1 | start 01_table 2 | start 01_trigger 3 | 4 | insert into tq84_table_with_trigger (col_1) values (1); 5 | commit; 6 | select * from tq84_table_with_trigger; 7 | 8 | host exp tables=(tq84_table_with_trigger) 9 | 10 | drop table tq84_table_with_trigger; 11 | 12 | host imp full=yes 13 | 14 | insert into tq84_table_with_trigger (col_1) values (2); 15 | commit; 16 | select * from tq84_table_with_trigger; 17 | -------------------------------------------------------------------------------- /expimp/table_with_trigger/01_table.sql: -------------------------------------------------------------------------------- 1 | create table tq84_table_with_trigger ( 2 | col_1 number, 3 | col_2 varchar2(30) 4 | ); 5 | -------------------------------------------------------------------------------- /expimp/table_with_trigger/01_trigger.sql: -------------------------------------------------------------------------------- 1 | create trigger tq84_table_with_trigger_trg 2 | before insert 3 | on tq84_table_with_trigger 4 | for each row 5 | begin 6 | 7 | :new.col_2 := to_char(sysdate, 'hh24:mi:ss'); 8 | 9 | end tq84_table_with_trigger_trg; 10 | / 11 | -------------------------------------------------------------------------------- /init-parameters/README.md: -------------------------------------------------------------------------------- 1 | session_cached_cursors: Compare with `v$session_cursor_cache` (columm `maximum`). 2 | 3 | [parameter_valid_values: pivot.sql](https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/master/Installed/dynamic-performance-views/parameter_valid_values/pivot.sql) 4 | -------------------------------------------------------------------------------- /misc/ODCI/aggregation/ex-01/_run.sql: -------------------------------------------------------------------------------- 1 | @ type 2 | @ type-body 3 | @ func 4 | @ test-table 5 | @ test-select 6 | 7 | @ clean-up 8 | -------------------------------------------------------------------------------- /misc/ODCI/aggregation/ex-01/clean-up.sql: -------------------------------------------------------------------------------- 1 | drop table tq84_agg_test; 2 | drop function tq84_text_range; 3 | drop type tq84_text_range_t; 4 | -------------------------------------------------------------------------------- /misc/ODCI/aggregation/ex-01/func.sql: -------------------------------------------------------------------------------- 1 | create or replace function tq84_text_range( 2 | value varchar2 -- The value to be aggregated per group 3 | ) return varchar2 4 | parallel_enable 5 | aggregate 6 | using 7 | tq84_text_range_t; 8 | / 9 | -------------------------------------------------------------------------------- /misc/ODCI/aggregation/ex-01/test-select.sql: -------------------------------------------------------------------------------- 1 | column b_conc format a30 2 | 3 | select 4 | a, 5 | tq84_text_range(b) b_conc 6 | from 7 | tq84_agg_test 8 | group by 9 | a; 10 | -- 11 | -- A B_CONC 12 | ------------ ------------------------------ 13 | -- 1 colporteur .. skimmington 14 | -- 2 bergschrund .. suedehead 15 | -- 3 apoptosis .. xenology 16 | -------------------------------------------------------------------------------- /misc/ODCI/table/multiplication/img/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReneNyffenegger/oracle-patterns/34f470b99f8af7ad61aa370fc366b3693916c3a5/misc/ODCI/table/multiplication/img/result.png --------------------------------------------------------------------------------