Skip to main content

A new app is (almost) born: ExpertTeam

A few weeks ago I announced formation of FeuerTeam, a team of Oracle technologists who would like to help me build the global PL/SQL community.

And now I find myself neck deep building an APEX app that will allow both FeuerTeam members and I to “self service” the activity on FeuerTeam. The fact that I am doing this and how I am doing this may be interesting to you. It reflects so clearly how I go about doing things these days.

I work on demand and try to avoid spending time on a project until I am sure it is needed.

I knew that I needed a team of people to help me accomplish my goals (which are under construction as I type). But I didn’t know if many people would be interested.

So I asked. And you responded. Lots of you. And then I knew: you will help me. Thanks so much! 

But then I was confronted with a challenge: how do I manage this process? Iudith is reviewing a magazine article. Ravshan is helping with APEX development questions. Others will be providing solutions to posted problems. How do I tell you about the kinds of help I need? How do you respond, sign up for a task? How do I make sure I don’t become a bottleneck in the whole process?

So there you have it: I needed to build an application.

Fortunately I have at my disposal the power of the relational model, the Oracle Database, SQL, PL/SQL and now APEX. I can build a website without having to learn barely anything new. How cool is that?

So I sorted out the database design: with straight table DDL. I don’t use a modeler. I am so old school in so many ways (even when it comes to music). I worked it out in my head and in scribbled notes on paper, typed it in (actually, generated most of it), ran it (creating tables and indexes and foreign keys and triggers) and then dove into APEX to start building the app in a fairly incremental fashion. Not sitting down and mapping out the whole site. And using the default settings of APEX to have the tool do as much of the work for me as possible (and test how well an almost pure default APEX app will look and behave).

This approach follows one of my favorite mottos: Act Now Perfect Later.

I just don’t seem to have the patience to sort it all out in advance. I want to see results now. The downside, as I am sure many of you have experienced, is that I make mistakes, miss things, and have to circle back and make corrections. The upside is that rather than having an app in a month or 3 months, I will very soon “open up” the app for your use.

I have decided to call this app ExpertTeam, because I generally assume that anything I need will be needed by others, so why not start with a generic approach? I am not building this app for me; I will just be its first user. I hope to offer ExpertTeam to other Oracle experts who could benefit from a team. I am sure they will take a close look at how well FeuerTeam has worked for me. So I am very incented to get this to work, and to make it easy for everyone to help.

And that helping has already begun. Ravshan, a FeuerTeam member, has been helping me move the ExpertTeam app forward much more quickly than I could have done on my own. So FeuerTeam is already a big win for me, and we’ve barely begun!  Thanks, Ravshan!

Iudith also recently did a really nice job reviewing my latest Oracle Magazine article. Thanks, Iudith!

And now can you see the problem? What happens when FIFTY of you do something really great for me? I will want to thank all of you, give you credit, but I can’t do this manually.

So I will push forward with ExpertTeam and hope that sometime this month I can invite to help me lift the global PL/SQL community to new levels of engagement, sharing and excitement!

Comments

Popular posts from this blog

Running out of PGA memory with MULTISET ops? Watch out for DISTINCT!

A PL/SQL team inside Oracle made excellent use of nested tables and MULTISET operators in SQL, blending data in tables with procedurally-generated datasets (nested tables).  All was going well when they hit the dreaded: ORA-04030: out of process memory when trying to allocate 2032 bytes  They asked for my help.  The error occurred on this SELECT: SELECT  *    FROM header_tab trx    WHERE (generated_ntab1 SUBMULTISET OF trx.column_ntab)       AND ((trx.column_ntab MULTISET             EXCEPT DISTINCT generated_ntab2) IS EMPTY) The problem is clearly related to the use of those nested tables. Now, there was clearly sufficient PGA for the nested tables themselves. So the problem was in executing the MULTISET-related functionality. We talked for a bit about dropping the use of nested tables and instead doing everything in SQL, to avoid the PGA error. That would, however require lots of wo...

How to Pick the Limit for BULK COLLECT

This question rolled into my In Box today: In the case of using the LIMIT clause of BULK COLLECT, how do we decide what value to use for the limit? First I give the quick answer, then I provide support for that answer Quick Answer Start with 100. That's the default (and only) setting for cursor FOR loop optimizations. It offers a sweet spot of improved performance over row-by-row and not-too-much PGA memory consumption. Test to see if that's fast enough (likely will be for many cases). If not, try higher values until you reach the performance level you need - and you are not consuming too much PGA memory.  Don't hard-code the limit value: make it a parameter to your subprogram or a constant in a package specification. Don't put anything in the collection you don't need. [from Giulio Dottorini] Remember: each session that runs this code will use that amount of memory. Background When you use BULK COLLECT, you retrieve more than row with each fetch, ...

PL/SQL 101: Three ways to get error message/stack in PL/SQL

The PL/SQL Challenge quiz for 10 September - 16 September 2016 explored the different ways you can obtain the error message / stack in PL/SQL. Note: an error stack is a sequence of multiple error messages that can occur when an exception is propagated and re-raised through several layers of nested blocks. The three ways are: SQLERRM - The original, traditional and (oddly enough) not currently recommended function to get the current error message. Not recommended because the next two options avoid a problem which you are unlikely  to run into: the error stack will be truncated at 512 bytes, and you might lose some error information. DBMS_UTILITY.FORMAT_ERROR_STACK - Returns the error message / stack, and will not truncate your string like SQLERRM will. UTL_CALL_STACK API - Added in Oracle Database 12c, the UTL_CALL_STACK package offers a comprehensive API into the execution call stack, the error stack and the error backtrace.  Note: check out this LiveSQL script if...